LaravelのVerifyバンドルで認証設定

LaravelのAuthクラスは、簡単な認証しか対応していません。そこで、今日はロールやパーミッションによる認証に対応しているVerifyバンドルについて調べてみたいと思います。

1. それでは、まずバンドルをインストールしてみたいと思います。下記のGithubのページからZipファイルをダウンロードします。解凍したZipファイルのフォルダ名をverifyに変更して、laravel/bundlesフォルダの中にフォルダごとコピーして下さい。

https://github.com/Toddish/Verify

2. Artisanコマンドでインストールするには、コマンドプロンプトを起動後、artisanファイルのあるフォルダに移動して下記のコマンドを入力します。これから先はマイグレーションでデータベーステーブルを作成したりしますので、Artisanコマンドが使えるように設定しておいて下さい(『LaravelのArtisanコマンド』参照)。

php artisan bundle:install verify

3. インストールが完了したら、verifyバンドルを登録します。今回追加したのは、5行目です。

laravel/application/bundles.php

return array(
'docs' => array('handles' => 'docs'),
 'admin' => array('handles' => 'admin'),
 'swiftmailer'=>array('auto'=>true),
 'verify'=>array('auto'=>true),
);

4. 次に認証ドライバをverifyに変更します。auth.phpの19行目を下記のように変更します。

laravel/application/config/auth.php

‘driver’ => ‘verify’,

5. マイグレーションを使ってデータベーステーブルを作成します。コマンドプロンプトで下記のように記述します。

php artisan migrate verify

マイグレーションを一度も使ったことの無い人は、先にマイグレーション用のデータベーステーブルを作成する必要があります。下記のコマンドを入力してマイグレーションテーブルを作成して下さい。

php artisan migrate:install

下記のようなマイグレーションテーブルが作成されます。

※ 尚、artisanコマンドでデータベーステーブルを作成するときは、config/database.phpをローカルのデータベース情報に設定しておいて下さい。config/localフォルダを作成してローカルのデータベース設定はそこに作成して、元のconfig/database.phpをリモート(レンタルサーバー)上の情報に変更していると、artisanコマンドはエラーになります。

6. 下記のように4つのデータベーステーブルが作成されました。

上記と同じデータベーステーブル名が既に作成されていると正しく動作しませんので、同じ名前のデータベーステーブルがあった場合は名称変更するなりして退避しておいて下さい。

7. これでVerifyバンドルを使う準備は出来ました。それでは、実際にどのように使うのかを調べてみましょう。

8. まず作成されたデータベーステーブルを見てみます。permissionsとpermission_roleには何もデータが入力されていません。これは、ユーザーがどのように使うかを決めて下さいということでしょうか。

9. 次にrolesテーブルには、Super Adminがレベル10で登録されています。他のroleも自分で作成して下さいということでしょう。例えば、Adminがレベル8、Moderatorがレベル5、Userがレベル1とか?

10. そしてusersテーブルですが、usernameがadmin、パスワードはハッシュされているので分かりませんが、passwordでログインできるとドキュメントには記述されていました。emailはexample@gmail.comになっています。role_idが1になっていますので、adminユーザーのロールはSuper Adminということになるのでしょう。

Verifyバンドルでログイン

11. それでは、以前『Laravelで認証設定』で作成したuserコントローラでログインしてみましょう。ユーザー名はusernameでもemailでもアクセス出来るようになっているみたいですが、このフォームはバリデーションでemail指定してありますので、ここでは、example@gmail.comと入力します。

12. おーっとエラーが表示されました。『ユーザーは立証されていません』と表示されています。設定ミスが無かったかどうか色々調べてみたのですが、特に問題はなさそうなので、ソースコードを調べてみることにしました。

13. 66行目の例外エラーはもし、!$user->verifiedならということなので、Userモデルのvefifiedプロパティがtrueで無ければ(falseなら)ということでしょうか。

14. そこでusersテーブルを調べてみると、verifiedフィールドが0になっています。つまりここを1に修正すれば、例外エラーは発生しないということです。早速、phpMyAdminでverifiedフィールドの値を1に修正したら下記のようにログインできました。

15. このverifiedフィールドはユーザー認証のアクティベート等に使用するために作成したものだと思われますが、この辺のドキュメントはしっかりと記述して欲しいところですね。

ユーザーの追加

16. 次にユーザーを追加してみたいと思います。userコントローラのcreateアクションを下記のように修正します。

laravel/application/controllers/user.php

//ユーザーの新規作成
 public function action_create(){
 //データ送信されたら
 if($input=Input::all()){
 //バリデーションルールの定義
 $rules=array(
 'username'=>'required|between:4,50',
 'email'=>'required|email|unique:users,email',
 'password'=>'required|alpha_num|between:4,16',
 'role_id'=>'required|integer',
 );
 //バリデーションをインスタンス化
 $val=Validator::make($input,$rules);
 //バリデーションNGなら
 if($val->fails()){
 //エラーと入力値をセットしてリダイレクト
 return Redirect::to('user/create')
 ->with_errors($val)
 ->with_input();
 }else{
//データのセット
 $data=Input::only(array('username','email','password','role_id'));
 //EloquentORMでデータの新規作成
 $create=User::create($data);
 //トップページへリダイレクト
 return Redirect::to('user/index');
 }
 }
 return View::make('user/create');
 }

 修正した箇所は、10行目にrole_idのバリデーションを追加したのと、21行目にrole_idを追加しただけです。

17. ビューファイルにrole_id追加のためのコードを下記のように追加します。フォーム内のパスワードの後に追加して下さい。

laravel/application/views/user/create.blade.php

<div class="control-group {{ $errors->has('role_id') ? 'error' : '' }}">
 {{ Form::label('role_id','ロールID',array('class'=>'control-label')) }}
 <div class="controls">
 {{ Form::text('role_id') }}
 {{ $errors->has('role_id') ? $errors->first('role_id','<p><span class="label label-important">:message</span></p>') : '' }}
 </div>
 </div>

18.  では実際にユーザーを追加してみましょう。

19.  下記のようにユーザーが追加されました。

20. 只、このユーザー登録はapplication/modelsのUserモデルを使用していますので、saltが登録されていません。

Verifyバンドルでユーザーの追加

21. createアクションの24行目を下記のように修正して新規ユーザーを登録してみます。

$create=Verify\Models\User::create($data);

22. 下記のようにsaltも登録されています。

23. つまり、Verifyバンドルのモデルを使用するには、下記のように記述します。

//ユーザーの追加
$user=Verify\Models\User::create(ユーザー情報の配列);
//ロールの追加
$role=Verify\Models\User::create(ロール情報の配列);

24. このVerifyバンドルはかなり自由度がありますので、使いこなせば面白そうですね。

本日は以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ