Laravel逆引きTips – 認証と認可

Laravel Laravel

Laravel逆引きTIps一覧へ戻る

基本的な認証の設定

config/auth.php
return [
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
    ],
];

// 使用例
if (Auth::attempt(['email' => $email, 'password' => $password])) {
    // 認証成功
}
PHP

カスタム認証ガードの作成

Auth::extend('jwt', function ($app, $name, array $config) {
    // JWTガードの実装
    return new JwtGuard(Auth::createUserProvider($config['provider']));
});
PHP

ミドルウェアを使用した認証の制御

Route::middleware('auth')->group(function () {
    Route::get('/profile', function () {
        // 認証済みユーザーのみアクセス可能
    });
});
PHP

ポリシーを使用した認可

class PostPolicy
{
    public function update(User $user, Post $post)
    {
        return $user->id === $post->user_id;
    }
}
PHP
app/Providers/AppServiceProvider.php
// AppServiceProviderのbootメソッド内で登録
Gate::policy(Post::class, PostPolicy::class);
PHP
// 使用例
if ($user->can('update', $post)) {
    // 更新が許可される
}
PHP

ロールとパーミッションの実装

class User extends Authenticatable
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }

    public function hasRole($role)
    {
        return $this->roles->contains('name', $role);
    }
}
PHP
app/Providers/AppServiceProvider.php
// AppServiceProviderのbootメソッド内で登録
Gate::define('edit-settings', function ($user) {
    return $user->hasRole('admin');
});
PHP
// 使用例
if (Gate::allows('edit-settings')) {
    // 設定の編集が許可される
}
PHP

API認証(Sanctum)

// Sanctumのインストールと設定後
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;
}

// トークンの作成
$token = $user->createToken('token-name');

// API認証の使用
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});
PHP

Laravel逆引きTIps一覧へ戻る

コメント

タイトルとURLをコピーしました