Yii ブログシステム作成(5)

ユーザ認証

■Yiiのユーザ認証

Yiiのスケルトンアプリケーションにはすでにユーザ認証機能が備わっている。

デフォルトでは"demo"もしくは"admin"でログインが可能である。

今回のブログシステムのユーザ認証ではUserデータベーステーブル(tbl_user)に基いて
行うように対応するコードを修正する。

ユーザ認証は"IUserIdentity"インターフェースを実装するクラスで行われる。
このクラスファイルは『/blog/protected/components/UserIdentity.php』に保存されている。

■ユーザ認証の実装

“IUserIdentity”クラスを修正
場所:/protected/components/UserIdentity.php

class UserIdentity extends CUserIdentity
{
  private $_id;
  
  /**
   *
   * ログイン処理の結果を返す
   * 
   **/
  public function authenticate()
  {
    // ユーザ名を取得
    $username = strtolower($this->username);
    // ユーザー名をチェック
    $user = User::model()->find('LOWER(username) = ?', array($username));
    
    if($user === null)
    {
      // ユーザ名が存在しない
      $this->errorCode = self::ERROR_USERNAME_INVALID;
    }
    else if(!$user->validatePassword($this->password))
    {
      // パスワードが間違っている
      $this->errorCode = self::ERROR_PASSWORD_INVALID;
    }
    else
    {
      // ログイン処理
      $this->_id = $user->id;
      $this->username = $user->username;
      $this->errorCode = self::ERROR_NONE;
    }
    
    return $this->errorCode == self::ERROR_NONE;
  }
  
  /**
   *
   * ID取得
   * 
   **/
  public function getId()
  {
    return $this->_id;
  }
}
"authenticate()"メソッドにおいて、Userクラスを用いて、tbl_userテーブルの中から該当する"username"を探す。
"User"クラスは『gii』によって作られてて"CActiveRecord"を継承しているため、アクティブレコードの機能を
利用して"tbl_user"にアクセスすることができる。

UserIdentityクラスでは"getId()"メソッドをオーバーライドして、"tbl_user"テーブルから見つかったユーザーのIDを返す。
"username"と"id"プロパティは共にユーザセッションに保存されコードのどこからでも"Yii::app()->user"でアクセスすることが可能。

次に、ユーザが正当なパスワードを入力しているかをチェックする(validatePasswordメソッド)ため”User”クラスを修正
場所:/protected/models/User.php

  /**
   * 
   * パスワードチェック
   * 
   **/
  public function validatePassword($password)
  {
    return CPasswordHelper::verifyPassword($password, $this->password);
  }
  
  /**
   * 
   * パスワードハッシュ化
   * 
   **/
  public function hashPassword($password)
  {
    return CPasswordHelper::hashPassword($password);
  }
平文のパスワードをデータベースに保存するのではなくパスワードのハッシュを保存する。

ユーザが入力したパスワードを検証する際は【Yii】に組み込まれている"CPasswordHelper"クラスを利用する。
パスワードのハッシュの検証

修正後にhttp://loaclhost/blog/index.phpにアクセスして”tbl_user”テーブルに保存したユーザ名と
パスワードを入力してログインする。(デフォルトでは”demo/demo”)でログイン可能。

ただし現状では、ユーザ管理機能がない為、ユーザはウェブインターフェースを通じてアカウントを変更
したり、新しいアカウントを作成することが出来ない。

ログイン後の画面

yii027

参考サイト:
http://www.yiiframework.com/doc/blog/1.1/ja/prototype.auth

Comments are closed.