こんにちは、かねこです。
はじめに
Laravelでの認証処理の実装方法について書きます。
Laravelというのは、PHPのウェブアプリケーションフレームワークのことです。
ちょういいよ!
Welcome! – Laravel PHP Framework
ウェブでの認証処理というのは、それはそれは七面倒臭いもので、セッションとかクッキーとかCSRFとか諸々あるわけですが、その辺すべてひっくるめてLaravelなら5分で完成します。
How To Step
Laravelプロジェクトのインストール(設置)
composerで以下のコマンドを実行します。今回はWindows+XAMPP環境下で試していますが、他の環境でもまったく一緒です。
> composer create-project laravel/laravel auth-project Installing laravel/laravel (v4.0.5) - Installing laravel/laravel (v4.0.5) Created project in auth (略) Generating autoload files Generating optimized class loader Compiling common classes Application key [tK8I8RpM7VNWpODB9HiimDmdwe6aje9e] set successfully.
インストールおしまい。
http://localhost/auth-project/public/
You have arrived !!!
認証の設定
今回は、話を単純化するために、app/config/auth.php のドライバ指定をdatabaseに変更します。
app/config/auth.php
// (略) 'driver' => 'database', // (略)
続いて、URLに対して認証用フィルタ(auth)を設定します。app/routes.phpを開いてauthフィルタを指定
app/routes.php
// (略)
Route::when('', 'auth'); // ←追加
Route::get('/', function()
{
return View::make('hello');
});
// (略)
authというのは、Laravelに初めから用意されているフィルターの名前です。
今回は全体に適用しているけれども、部分的に適用するような書き方もできます。
Route::when(‘admin/*’, ‘admin’);
画面更新!
http://localhost/auth-project/public/
なんのこれしき。
なければつくりましょう。
mysql> create database auth-project;
続いてapp/config/database.php
// (略) 'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'auth-project', 'username' => 'root', 'password' => 'password-desu', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), // (略)
画面更新!
http://localhost/auth-project/public/
まだログイン処理を書いていないのでエラーになりましたが、無事にログイン用URLにリダイレクトされました。よしよし。
ログイン用ページ作成
ログイン用ページを作ります。
本当はエラー処理とか書くんだけど、今回は省略しています。
‘before’ => ‘csrf’は、authと同じくLaravelに予め用意されているフィルターで、CSRF対策用のトークンチェックを実行してくれます。
app/routes.php
// (略)
Route::get('/login', function(){return View::make('login');});
Route::post('/login', array('before' => 'csrf', function(){
$inputs = Input::only(array('username', 'password'));
if ( Auth::attempt($inputs) ) {
return Redirect::home();
} else {
return Redirect::back()->withInput();
}
}));
// (略)
View::make(‘login’);の部分のテンプレートを設置
app/views/login.blade.php
@if ( Auth::guest() )
{{ Form::open() }}
{{ Form::token() }}
<p>
{{ Form::label('username', 'ユーザー名:') }}
@if($errors->has('username'))
<p class="error-message">{{ $errors->first('username') }}</p>
@endif
{{ Form::text('username', Input::old('username', '')) }}
</p>
<p>
{{ Form::label('password', 'パスワード:') }}
@if($errors->has('password'))
<p class="error-message">{{ $errors->first('password') }}</p>
@endif
{{ Form::password('password') }}
</p>
<p>
{{ Form::submit('ログイン') }}
</p>
{{ Form::close() }}
@else
ログイン済みです
@endif
画面更新
http://localhost/auth-project/public/
usersテーブルの作成
このままログインボタンを押すと、テーブルが存在しないためエラーとなります。
作るの面倒だから、Laravelに作らせてみます。
app/routes.php
// (略)
Route::get('/create-users-table', function()
{
Schema::create('users', function($table) {
$table->increments('id');
$table->string('username', 100);
$table->string('password', 100);
$table->timestamps();
});
$user = new User;
$user->username = 'user';
$user->password = Hash::make('password');
$user->save();
return 'つくった!';
});
// (略)
以下のURLにアクセス
http://localhost/auth-project/public/create-users-table
ログイン
もういちどトップページにアクセスします
http://localhost/auth-project/public/
ログアウト
ログアウト用のメソッドは、Auth::logout()です。
app/routes.php
// (略)
Route::get('/logout', function(){
Auth::logout();
return Redirect::to('/');
});
// (略)
おわりに
はい、とっても簡単でしたねー。
かねこ














