ララベルを使用したユーザー認証のプログラムを紹介していきます。
ユーザー認証と言っても、いろいろ考えることがたくさんあります。
認証の対象としては、フロントエンドとして会員認証のためのログインがあるし、フロントエンドがあればもちろんバックエンドがあり、そこでは会員と違う管理者を認証する必要もあります。また、最近ではFacebookやTwitterなどのソーシャルウェブサイトのログインを自分のウェブサイトの会員認証のために利用することも可能です。
また、ユーザー認証に関わる機能としては、
- ユーザーの登録
- ユーザーのログイン
- ユーザーのプライベート情報の保護
- パスワードを忘れたときにパスワードのリセット
- ユーザーのログアウト
- パスワードの編集
- ユーザーログインの不正攻撃対策
- 認証したユーザーのアクセス権限管理
と、いろいろあります。どれもアプリの開発には必要な機能です。
嬉しいことに、ララベルでは、画面のテンプレートファイル(ブレード)以外は、これらの機能をカバーするプログラムがほとんど揃っています。今回からこれらの機能を見ていきましょう。
アプリの設定
まず、このためにララベルのプロジェクトを作成します。新プロジェクトの名前は、demo-auth。以下をコマンドラインで実行してください。
laravel new demo-auth
あるいは、
~/.composer/vendor/bin/laravel new demo-auth
次にデータベースを作成してください。mysql, sqlite、pgsqlなどお好きなものでDBを作成してください。
DB作成後は、設定ファイルの編集です。まず、サンプルの設定ファイルを改名して、この環境でのアプリの設定ファイルとします。
mv .env.example .env
.envのファイルで編集が必要なのは今のところ、以下のDB設定の部分です。
DB_HOST=localhost DB_DATABASE=データベースの名前 DB_USERNAME=データベースユーザーの名前 DB_PASSWORD=データベースのパスワード
その後、以下を実行してください。
php artisan key:generate
それにより、.envのファイルの
APP_KEY=SomeRandomString
の「SomeRandomString」に値が「s0IWRnfPlNAiPl7Bwl1MX8V7i14loYyK」のようなランダム値に変更されます。この値は、アプリのすべての暗号化に使用されるので、一度設定したら2度と変えないように。
これで環境の準備は完了です。
DBテーブルの作成
この作業には、すでにdemo-authディレクトリで作成された以下のファイルが重要となります。これらをまず見てみましょう。
app/User.php
config/auth.php
まず、2のconfig/auth.php
return [
// ドライバーにはエロクエントを使用します。オプションとしては、'database'も可能です。
'driver' => 'eloquent',
// ドライバーでエロクエントを使用するなら、そのクラスをここで指定。ファイルは app/User.phpです。
// ::classは、namespaceとともにクラス名を返します。
'model' => App\User::class,
// ドライバーがdatabaseならテーブル名を指定。
'table' => 'users',
// パスワードを忘れたときにリセットするための情報。
// emailは、views/emails/password.blade.phpを送信するメールとテンプレート(作成必要あり)とします。
// DBテーブルは、password_resetsを使います。
// リセットのトークンは発行されてから60分間で時間切れとなります。
'password' => [
'email' => 'emails.password',
'table' => 'password_resets',
'expire' => 60,
],
];
今回はドライバーにエロクエントを使用するので、モデルファイルのapp/User.phpを見てみましょう。
<?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class User extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
// このクラスの関数の定義は、以下のtraitを使用しています。
use Authenticatable, Authorizable, CanResetPassword;
// 「users」が使用するDBテーブルとなります。
protected $table = 'users';
// これらが入力フィールドという仮定。
protected $fillable = ['name', 'email', 'password'];
// JSONで排除するフィールド名
protected $hidden = ['password', 'remember_token'];
}
ということで、DBテーブルとして必要なのは、usersとpassword_resetsの2つとなります。実際のプロジェクトで、DBテーブル名や、テーブルのフィールド名に違いがあれば、これらが編集必要なファイルですね。
さて、それらのテーブルを定義しているのが、以下のファイル。
database/migrations/2014_10_12_000000_create_users_table.php
database/migrations/2014_10_12_100000_create_password_resets_table.php
それらは以下をコマンドラインで実行して作成します。
php artisan migrate
下準備は、以上で完了です。次は、会員登録画面、ログイン画面を作成します。
メルマガ購読の申し込みはこちらから。