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',
],
初期状態は上だけど、作ったものをここに追加してもエラー。 何も入れないと期待通りの動作をした。