Laravel4の認証設定(その1)

今日は、Laravel4の認証設定について調べてみたいと思います。認証設定を調べる前に、今日は認証用の下準備をします。

1. それではまず、config/auth.phpのデフォルト値を調べてみましょう。

laravel4/app/config/auth.php

<?php
return array(
'driver' => 'eloquent',
'model' => 'User',
'table' => 'users',
'reminder' => array(
'email' => 'emails.auth.reminder', 'table' => 'password_reminders',
),
);

ドライバーはeloquentです。モデル名はUserで、データベーステーブルはusersになっています。デフォルトでUserモデルは作成されています。リマインダー用のビューファイルも作成されています。

スキーマビルダーでusersテーブルの作成

2. 認証用のテーブルはusersテーブルですので、まずusersテーブルを作成したいと思います。phpMyAdminで何回かテーブルを作成していますが、今日は、Laravelのスキーマビルダーを使ってusersテーブルを作成してみたいと思います。

3. ルーターに下記のように記述します。

laravel4/app/routes.php

Route::get('create/users/table',function()
{
 //usersテーブルの存在確認
 if(!Schema::hasTable('users'))
 {
 // usersテーブルの作成
 Schema::create('users',function($table)
 {
 $table->increments('id');
 $table->string('username',50);
 $table->string('email',100);
 $table->string('password',100);
 $table->tinyinteger('active')->default(0);
 $table->tinyinteger('suspended')->default(0);
 $table->integer('level')->default(1);
 $table->timestamps();
 });
 return 'usersテーブルを作成しました。';
 }else{
 return 'usersテーブルが存在しますので、処理を中止します。';
 }
});
  • 4行目:hasTableメソッドで、usersテーブルの有無を確認しています。usersテーブルがなければ、テーブルを作成し、テーブルが存在すれば、処理を中止します。
  • 7行目:createメソッドで、usersテーブルを作成します。
  • 9行目:incrementsメソッドで自動連番の主キーカラムを作成します。
  • 10行目:stringsメソッドで、VARCHARカラムを作成します。第2引数に値の長さを指定します。
  • 13行目:tinyintegerメソッドで、TINYINTカラムを作成します。defalutメソッドで、初期値を指定することが出来ます。
  • 15行目:integerメソッドで、INTカラムを作成します。defalutメソッドで、初期値を指定することが出来ます。
  • 16行目:timstampsメソッドで、created_atとupdated_atの両カラムを同時に作成することが出来ます。
  • ※usersテーブルで最低限必要なカラムはid,usernameまたはemail及びpasswordですが、アクティベーション用のactiveと、使用中止のsuspended、ユーザーのアクセスレベル用のlevelカラムも同時に作成しました。また、デフォルトでは、created_atとupdated_atは使用することになっていますので、この二つも作成しました。

5. ブラウザからアクセスしてみます。

http://localhost/laravel4/public/create/users/table

laravel4_042

6. phpMyAdminで作成されたテーブルを確認してみます。

laravel4_047

UserControllerの作成

7. ルーターにUserControllerをRESTフルコントローラとして登録します。

laravel4/app/routes.php

Route::controller('user','UserController');

8. indexアクションとcreateアクションを下記のように作成します。

laravel4/app/controllers/UserController.php

<?php
class UserController extends BaseController {
//トップページ
 public function getIndex()
 {
 //EloquentORMでデータの取得
 $data['users']=User::orderBy('created_at','desc')->get();
 $view=View::make('user.index',$data);
 return $view; 
 }
//createビューファイルの表示
 public function getCreate()
 {
 return View::make('user.create');
 }
 //新規ユーザー作成
 public function postCreate()
 {
 //トークンチェック
 if (Session::getToken() != Input::get('_token'))
 {
 throw new Illuminate\Session\TokenMismatchException;
 }else{
 $inputs=Input::all();
 //バリデーションルールの指定
 $rules = array (
 'username' => array ( 'required', 'min:4', 'max:50', 'unique:users' ),
 'email' => array ( 'required', 'email', 'max:100', 'unique:users' ),
 'password' => array ( 'required', 'min:4', 'max:50' ),
 );
 $val = Validator::make( $inputs, $rules );
 //バリデーションNGなら 
 if ( $val->fails() )
 {
 return Redirect::back()->withErrors( $val )->withInput();
 }
 //ユーザーの新規作成
 $user=new User;
 $user->username=Input::get('username');
 $user->email=Input::get('email');
 $user->password=Hash::make(Input::get('password'));
 $user->save();
 //トップページへリダイレクト
 return Redirect::to('user');
 }
 }
}
  • 7行目:本来なら、EloquentORMを使用するには、Userモデルを作成するのですが、Userモデルはデフォルトで作成されていますので、それを使用します。
  • 7行目:最後のget()の箇所は、paginate()でページネーション指定することが出来るはずですが、取得したページデータやリンクページの表示方法をまだ調べていませんので、今回はgetで表示します。
  • 20行目:トークンチェックを行っています。必ず、Form内にForm::token()メソッドでトークンを埋め込んでください。
  • 38-42行目:User::create()メソッドで、まとめて登録する事も出来ますが、いくつか設定をしなければならないので、今回は採用しませんでした。

9. indexビューを作成します。テンプレートファイルは、『Laravel4のBladeテンプレート』で作成したmaster.blade.phpを使用しています。

laravel4/app/views/user/index.blade.php

@extends('layouts.master')
@section('navigation')
 @parent
 <li><a href={{ URL::to('user/create') }}>新規作成</a></li>
@stop
@section('content')
<table class="table table-striped table-bordered">
 <tr>
 <th>id</th>
 <th>ユーザー名</th>
 <th>Eメールアドレス</th>
 <th>パスワード</th>
 <th>作成日</th>
 <th>更新日</th>
 <th>処理</th>
 </tr>
@foreach($users as $user)
 <tr>
 <td>{{ $user->id }}</td>
 <td>{{ $user->username }}</td>
 <td>{{ $user->email }}</td>
 <td>{{ $user->password }}</td>
 <td>{{ $user->created_at }}</td>
 <td>{{ $user->updated_at }}</td>
 <td><i class="icon-pencil"></i>
 <a href="#">編集</a>
 <i class="icon-remove"></i>
 <a href="#">削除</a></td>
 </tr>
@endforeach
@stop

10. createビューを下記のように作成します。

laravel4/app/views/user/create.blade.php

@extends('layouts.master')
@section('navigation')
 @parent
 <li><a href={{ URL::to('user') }}>ユーザー一覧</a></li>
@stop
@section('content')
<h4>新規ユーザーを作成します</h4>
{{ Form::open(array('class'=>'form-horizontal')) }}
 <div class="control-group">
{{ Form::label('username','ユーザー名',array('class'=>'control-label')) }}
 <div class="controls">
{{ Form::text('username') }}
@if($errors->has('username'))
</div>
<div class="controls label label-important">
{{ $errors->first('username') }}
@endif
 </div>
</div>
 <div class="control-group">
{{ Form::label('email','Eメールアドレス',array('class'=>'control-label')) }}
 <div class="controls">
{{ Form::text('email') }}
@if($errors->has('email'))
</div>
<div class="controls label label-important">
 {{ $errors->first('email') }}
@endif
</div>
</div>
 <div class="control-group">
{{ Form::label('password','パスワード',array('class'=>'control-label')) }}
 <div class="controls">
{{ Form::password('password') }}
@if($errors->has('password'))
</div>
<div class="controls label label-important">
 {{ $errors->first('password') }}
@endif
</div>
</div>
 <div class="form-actions">
 {{ Form::submit('新規登録',array('class'=>'btn btn-primary')) }}
 </div>
{{ Form::token() }}
{{ Form::close() }}
@stop

ユーザー登録

11. それでは、新規ユーザーを登録してみます。

http://localhost/laravel4/public/user/create

laravel4_044

10. データが入力されました。とりあえず2件ほど入力してみました。

http://localhost/laravel4/public/user

laravel4_045

今日は、usersテーブルの作成と、ユーザーの登録までにします。次回は、authフィルターの適用方法と、loginの仕方を調べてみたいと思います。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ