WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
ユーザー認証の基礎

ユーザー認証の基礎

このエントリーをはてなブックマークに追加

Laravelは、ユーザー認証を簡単に構築できる機能を持っています。そして、Eloquent認証ドライバーでデフォルトとして使用されるUserモデルも用意しています。

基本設定

認証の基本設定は、app/config/auth.phpです。開いてみてみましょう。

<?php

return array(

/*
|--------------------------------------------------------------------------
| デフォルト認証ドライバー
|--------------------------------------------------------------------------
|
| このオプションは認証で使用するドライバーを設定します。
| このドライバーはアプリケーションの保護領域へユーザーがアクセスする時の
| 認証を管理します。
|
| サポートドライバー: "database", "eloquent"
|
*/

'driver' => 'eloquent',

/*
|--------------------------------------------------------------------------
| 認証モデル
|--------------------------------------------------------------------------
|
| "Eloquent"認証ドライバーを使用する場合、ユーザー情報を取得する
| Eloquentモデルの指定が必要です。もちろん、通常は"User"モデル
| でしょうが、お好きなものをどうぞ。
|
*/

'model' => 'User',

/*
|--------------------------------------------------------------------------
| 認証テーブル
|--------------------------------------------------------------------------
|
| "Database"認証ドライバーを使用する場合、ユーザーを取得するための
| テーブルを指定する必要があります。基本的な値をデフォルトにしていますが、
| お好きなテーブル名へ簡単に変更できます。
|
*/

'table' => 'users',

/*
|--------------------------------------------------------------------------
| パスワードリマインダー設定
|--------------------------------------------------------------------------
|
| ここではパスワードリマインダーの設定を行います。それにはパスワード
| リマインダー時に使用するメールの指定も含まれます。また、リセットトークンを
| 保存しておくためのテーブル名も指定可能です。
|
*/

'reminder' => array(

'email' => 'emails.auth.reminder', 'table' => 'password_reminders',

),

);
  • 18行目:デフォルトの認証ドライバーはEloquentです。
  • 31行目:認証モデルはUserです。
  • 44行目:認証テーブルはusersです。
  • 57-61行目:パスワード再発行用のパスワードリマインダーも用意されています。

Userモデルの中身も見てみましょう。

<?php

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

/**
* モデルで使用されるデータベース
*
* @var string
*/
protected $table = 'users';

/**
* モデルのJSON形式に含めない項目
*
* @var array
*/
protected $hidden = array('password');

/**
* ユーザーのユニークな識別子の取得.
*
* @return mixed
*/
public function getAuthIdentifier()
{
return $this->getKey();
}

/**
* ユーザーのパスワードの取得
*
* @return string
*/
public function getAuthPassword()
{
return $this->password;
}

/**
* パスワードリマインダーを送信するメールアドレスの取得
*
* @return string
*/
public function getReminderEmail()
{
return $this->email;
}
  • Laravel4.2では、Userモデルは下記のようになっています。
  • <?php
    use Illuminate\Auth\UserTrait;
    use Illuminate\Auth\UserInterface;
    use Illuminate\Auth\Reminders\RemindableTrait;
    use Illuminate\Auth\Reminders\RemindableInterface;
    class User extends Eloquent implements UserInterface, RemindableInterface {
    use UserTrait, RemindableTrait;
    /**
     * モデルで使用されるデータベース
     *
     * @var string
     */
     protected $table = 'users';
    /**
     * モデルのJSON形式に含めない項目
     *
     * @var array
     */
     protected $hidden = array('password', 'remember_token');
    }
  • パスワードリマインダーは、PHP5.4の新機能であるTrait(トレイト)*を使用するようになりました。
  • 同様にソフトデリートもトレイトを使用するようになりました。

パスワードの保存

LaravelのHashクラスは安全なBcyptハッシュを提供しています。Hash::makeメソッドで、パスワードをハッシュします。

$password=Hash::make(Input::get(‘password’));

保存したパスワード(ハッシュしたパスワード)を確認するには、Hash::checkメソッドを使用します。

if(Hash::check('password',$hashedPassword')){
 //パスワードの一致
 }

ユーザー認証

ユーザーを認証してアプリケーションにログインさせるには、Auth::attemptメソッドを使用します。

Auth::attempt(array(
 'username'=>Input::get('username'),
 'password'=>Input::get('password'),
 'activate'=>1
 ),true);
  • ユーザー認証の必須項目は、passwordともう一つの項目です。
  • password以外の項目は、usernameやemail、又は、それ以外の項目でも使用することが出来ます。
  • 上記では、usernameとpassword以外に、activate項目が1のユーザーを認証しています。つまりアクティベートしていないユーザーは認証できないように設定することが出来ます。
  • 第2引数はオプションで、trueに指定すると、ユーザー認証は、無期限(もしくは手動でログアウトするまで)保たれます。

ログインしたユーザーにはAuth::user()->項目名;でアクセスすることが出来ます。

又、リレーションを指定したテーブルにも下記のようにアクセスすることが出来ます。

Auth::user()->role()->first()->level;

  • usersテーブルとrolesテーブルをリレーション設定していると、userオブジェクトから、roleオブジェクトのプロパティ(項目)にアクセスする事が出来ます。リレーションの設定方法は後日ご紹介します。

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です