WinRoadのLaravel4初心者講座

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

Winroad徒然草の管理人がお届けします
テーブルとコントローラの作成

テーブルとコントローラの作成

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

Laravel4では、ユーザーが忘れてしまったパスワードをリセットする為のプログラム(パスワードリマインダー)を標準で装備しています。そのパスワードリマインダーの使い方を調べてみたいと思います。

  1. Laravelをインストールしたときに標準で添付されているUserモデルには、RemindableInterfaceが実装されています。
    <?php
     use Illuminate\Auth\UserInterface;
     use Illuminate\Auth\Reminders\RemindableInterface;class User extends Eloquent implements UserInterface, RemindableInterface {
    /**
     * モデルで使用されるデータベース
     *
     * @var string
     */
     protected $table = 'users';
     protected $guarded = array('id','password');
    /**
     * モデルの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;
     }
    }
  2. まず最初に、パスワードをリセットする為のトークンを保存するテーブルをArtisanコマンドで生成します。
    php artisan auth:reminders-table
    php artisan migrate
  3. これで、password_remindersテーブルが生成されました。
  4. password_remindersテーブルは、email,token,created_atの3つのフィールドで作成されています。
    laravel019
  5. そして、Artisanコマンドで、パスワードリマインダーコントローラーも生成します。
    php artisan auth:reminders-controller
  6. 生成されたRemindersController.phpをルーターに登録します。
    Route::controller('reminders','RemindersController');
  7. 生成されたRemindersController.phpファイルには、getRemind,postRemind,getReset,postResetの4つのメソッドがあります。
    <?php
    class RemindersController extends Controller {
    public function getRemind()
     {
     return View::make('password.remind');
     }
    
     public function postRemind()
     {
     switch ($response = Password::remind(Input::only('email')))
     {
     case Password::INVALID_USER:
     return Redirect::back()->with('error', Lang::get($response));
    case Password::REMINDER_SENT:
     return Redirect::back()->with('status', Lang::get($response));
     }
     }
    public function getReset($token = null)
     {
     if (is_null($token)) App::abort(404);
    return View::make('password.reset')->with('token', $token);
     }
    public function postReset()
     {
     $credentials = Input::only(
     'email', 'password', 'password_confirmation', 'token'
     );
    $response = Password::reset($credentials, function($user, $password)
     {
     $user->password = Hash::make($password);
    $user->save();
     });
    switch ($response)
     {
     case Password::INVALID_PASSWORD:
     case Password::INVALID_TOKEN:
     case Password::INVALID_USER:
     return Redirect::back()->with('error', Lang::get($response));
    case Password::PASSWORD_RESET:
     return Redirect::to('/');
     }
     }
    }
  8. 次回は、パスワードを再発行するためのremindeビューとパスワードをリセットする為のresetビューを作成します。

« »

コメントを残す

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