Laravelでのログイン処理のかきかた
こんにちは、かねこです。
はじめに
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('/'); }); // (略)
おわりに
はい、とっても簡単でしたねー。
かねこ