速習Larave3(その9)、ユーザー認証No.1
Tags : Laravel3
今回から2回に渡り、認証を取り入れます。
- ソース:github
ユーザー認証には準備が多少必要ですからね。早速とりかかりましょう。
Laravelの認証自体はシンプルなものです。ユーザーテーブルを用意し、それを元に認証を行います。
認証はシンプルですが、ルートのフィルターとの組み合わせで、複雑な認証も実現できます。まあそれは皆さんにお任せして、今回は一番シンプルな形で実現しましょう。
まず、ユーザーテーブルがなければ話になりません。覚えていますか、マイグレーション?使いますよ、マイグレーション。
マイグレーションのコードを生成するためにArtisanコマンドラインを使うんでしたね。
php artisan migrate:make create_users_table
application/migrations
フォルダーに生成されたコードを開いてください。アルファベット順に並んでいるなら、一番下のPHPファイルですよ。なにせ先頭に生成日時が付きますからね。
内容は以下の通りです。
<?php class Create_Users_Table { /** * Make changes to the database. * * @return void */ public function up() { Schema::create('users', function($table) { $table->increments('id'); $table->string('username', 128); $table->string('password', 64); $table->timestamps(); }); } /** * Revert the changes to the database. * * @return void */ public function down() { Schema::drop('users'); } }
タイムスタンプを生成しております。いらなければ外してください。でも、ユーザーの登録日などは、わりと知りたがられる情報です。残りのID、ユーザー名、パスワードが必要となります。特に長さの制限はありませんが、パスワードは暗号化の関係上、この程度が良いようです。本当かどうかは知りません。(前に調べたのですが、理由は忘れました。)
作成したら、マイグレーションを実行します。
php artisan migrate
上手く行ったら次に、ユーザーを一人分作成しましょう。マイグレーションを使う練習だと思い、再度生成してください。
php artisan migrate:make insert_admin_user
生成されたマイグレーションファイルは以下のように、入力してください。
<?php class Insert_Admin_User { /** * Make changes to the database. * * @return void */ public function up() { DB::table('users') ->insert(array( 'username' => 'admin', 'password' => Hash::make('admin'), 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), )); } /** * Revert the changes to the database. * * @return void */ public function down() { DB::table('users') ->where('username', '=', 'admin') ->delete(); } }
ポイントはパスワードをHashクラスでハッシュし保存していることです。パスワードの平文保存は絶対に避けましょう。盗まれた場合、ユーザーに迷惑がかかります。
Laravelの認証はシンプルと言っても、多少のバリエーションが付けられます。設定ファイルを確認しましょう。config/auth.php
です。
ドライバーはLaravelのアクティブレコード/クエリービルダーであるFluentか、ORMであるEloquentが選べます。これは、Authクラスにより認証中のユーザー情報がuser()メソッドで取得できるのですが、渡ってくるインスタンスに違いがあるようです。(私はいつも、Eloqunetを指定します。)
'username' => 'email',
と'password' => 'password',
という、わけのわからない設定が続きますね。これは認証に使用するカラム名です。ユーザー名に当たるカラムに何を使用するか、パスワードとしてどのカラムを使用するかを指定します。デフォルトでユーザー名に当たるものはメールアドレスになっています。今回はメールアドレスを用意していませんので、username
に書き換えてください。これを忘れると、エラーにはならないのですが、認証できずに悩むことになります。特に初心者のかたはやりがちですので、注意しましょう。(私は3度繰り返し、やっと覚えました。)
model
はEloquent ORMをドライバーで指定した場合に使用するORMモデルの名前です。デフォルト通り、User
のままにしてください。最後のtable
はその名の通り、認証に使用するテーブルです。これもusers
のまま、変更しません。
続いて認証に使用するUserモデルを作成しましょう。usersテーブルに対するUserです。Laravelのネーミングルールに従っていますね。変えても良いのですが、設定が増えるので素直に作成しましょう。
models.user.php
を作成してください。
<?php class User extends Eloquent { public static $timestamps = true; public function set_password($password) { $this->set_attribute('password', Hash::make($password)); } }
Postモデルとほぼ同じです。自動更新の$timestamps
をtrueに設定しています。
目新しいのはset_passwordです。set_
で始まるメソッドはセッターとしてEloquentでは扱われます。ですから、これはパスワードを保存する場合に、自動的にハッシュをかけてから、保存するように設定しているわけです。
認証に使用するからと言っても、特別の設定はありません。
これで、認証のための準備は終了です。いよいよコーディングに入ります。続きは次の記事です。