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一覧へ戻る

著者

Webエンジニア歴30年、フリーランスバックエンドエンジニア。

PHP歴約30年(Laravel 7年・FuelPHP 5年・CakePHP・自作FW)、
JavaScript歴約20年(React・Vue各4年)。
AWS(EC2 / CloudFront / RDS / API Gateway など)・
GCP(BigQuery)を使ったバックエンド開発を中心に、
複数の事業会社・受託案件でシステム設計から実装・運用まで担当しています。

PHPがバージョン4の時代から書いており、
Laravelが普及する前のフレームワーク乱立期も経験しています。
「昔はこう書いていたが今はこう」という変遷を肌で知っているエンジニアとして、
単なるコマンドの使い方だけでなく、なぜそうするのかの背景まで伝えることを意識して書いています。

このブログでは、実務で実際に詰まった箇所・調べたこと・気づいたことを
そのまま記事にしています。誰かの「詰まり」が解決するきっかけになれば幸いです。

千原 耕司をフォローする

役にたったと思ったら応援をお願いします m(._.)m

Laravel
スポンサーリンク
シェアする
千原 耕司をフォローする
タイトルとURLをコピーしました