ハマログ

株式会社イーツー・インフォの社員ブログ

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/

laravel-installted

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/

データベースないっておこられた(><)
laravel-Unknown-database

なんのこれしき。
なければつくりましょう。

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にリダイレクトされました。よしよし。

laravel-login-notfound

ログイン用ページ作成

ログイン用ページを作ります。
本当はエラー処理とか書くんだけど、今回は省略しています。
‘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/

でた!
laravel-login

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

つくった!とのこと。
laravel-create-users

できてる。すごい。
laravel-users-table

ログイン

もういちどトップページにアクセスします
http://localhost/auth-project/public/

user/passwordを入力
laravel-login

やったね成功!
laravel-login-success

ログイン済みでーす
logined

ログアウト

ログアウト用のメソッドは、Auth::logout()です。

app/routes.php

// (略)
Route::get('/logout', function(){
	Auth::logout();
	return Redirect::to('/');
});
// (略)

おわりに

はい、とっても簡単でしたねー。

かねこ

authcomposerLarabelLaravelmysqlPEAEPHPログアウトログイン認証

  kaneko tomo   2013年7月4日


関連記事

Laravelのキューイングを実装する

はじめに Laravel5で、とあるサービスの並行して走る複数のジョブをComm…

maven-war-plugin でファイルを除外する

maven-war-plugin 余計なファイルをアーカイブされないようにしたい…

Laravelのjsonレスポンスでスラッシュをエスケープしない

Laravelでjson形式のレスポンスを返却する際に、内部でjson_enco…


← 前の投稿

次の投稿 →