速習Larave3(その9)、ユーザー認証No.1
タグ: 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では扱われます。ですから、これはパスワードを保存する場合に、自動的にハッシュをかけてから、保存するように設定しているわけです。
認証に使用するからと言っても、特別の設定はありません。
これで、認証のための準備は終了です。いよいよコーディングに入ります。続きは次の記事です。