ダイヤユウ

ダイヤ ユウ

主にプログラミング。

【laravel】sentinelを使ってユーザー認証するチェックポイントを作成

laravelでsentinelというユーザー管理・権限管理をするためのライブラリを使いました。

ユーザーのactiveフラグが立っているものだけログインさせたい。 その際にcheckpointを新たに作ったのでメモ。

checkpointを作る

まずは、checkpointを作る。

<?php

namespace App\Services;

use Cartalyst\Sentinel\Users\UserInterface;
use Cartalyst\Sentinel\Checkpoints\CheckpointInterface;

class loginCheckpoint implements CheckpointInterface
{
    public function login(UserInterface $user)
    {
        //
    }

    public function check(UserInterface $user)
    {
        //
    }

    public function fail(UserInterface $user = null)
    {
        //
    }
}

これをlaravelに読み込ませたいので、サービスプロバイダーで登録します。 addCheckpointで追加することが可能。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Sentinel;

class loginCheckpointServiceProvider extends ServiceProvider
{
    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        Sentinel::addCheckpoint('loginCheckpoint', new \App\Services\loginCheckpoint);
    }
}

さっき作ったファイルをaddCheckpointの引数に指定。 これでlaravelの初期起動時に登録されるはず。

checkpointのファイルをいじる。

<?php

namespace App\Services;

use Cartalyst\Sentinel\Users\UserInterface;
use Cartalyst\Sentinel\Checkpoints\CheckpointInterface;

class loginCheckpoint implements CheckpointInterface
{
    public function login(UserInterface $user)
    {
        dd($user);
    }


    public function check(UserInterface $user)
    {
   
    }

    public function fail(UserInterface $user = null)
    {
        //
    }

    protected function checkActivation(UserInterface $user)
    {
        
    }
}

ログインすると、dd($user);でユーザー情報が出るはず。

ここにログインの判定処理を書けば、いけるだろう。ちなみに、最初から書かれいてるcheck()とかfail()とかはInplementsしているから書かないとエラーになるはず。

    public function login(UserInterface $user)
    {
        return $user->is_active == true;
    }

userがアクティブな場合にだけ、ログインを通過させる。

気になったこと

Cartalyst/sentinelの以下の記述に作ったcheckpointを追加すると、画面が表示されない。

'checkpoints' => [

    'throttle',
    'activation',

],

初期状態は上だけど、作ったものをここに追加してもエラー。 何も入れないと期待通りの動作をした。