Yiiログイン認証とグローバルアクセスユーザID


Yiiには検証/認可(auth)フレームワークが内蔵されており、使いやすく、特別なニーズに合わせてカスタマイズすることができます.
Yii authフレームワークの核心は、事前定義されたユーザ(user)アプリケーションコンポーネントであり、IWebUserインタフェースを実現するオブジェクトである.このユーザーコンポーネントは、現在のユーザーの永続性認証情報を表します.Yii::app()->userを通じてどこでもアクセスできます.
このユーザーコンポーネントを使用すると、CWebUser::isGuestでユーザーがログインしているかどうかを確認できます.1人のユーザーにログイン(login)またはログアウト(logout)できます.CWebUser::checkAccessでこのユーザーが特定の操作を実行できるかどうかを確認できます.このユーザの一意の識別子(unique identifier)およびその他の永続性アイデンティティ情報も取得できます.
 
ユーザーを検証するために、検証ロジックのあるアイデンティティクラスを定義します.このアイデンティティクラスはIUserIdentityインタフェースを実装する.
異なるクラスは、異なる認証方式(例えば、OpenID、LDAP)を実装することができる.ユーザー名とパスワードの認証方法であるCUserIdentityを継承することが望ましい.
アイデンティティクラスを定義する主な作業は、IUserIdentity::authenticateメソッドを実装することです.ユーザー・セッションでは、必要に応じて、アイデンティティ・クラスが別のアイデンティティ情報を定義する必要がある場合があります.
次に例を示します.
class UserIdentity extends CUserIdentity
{
    private $_id;
    public function authenticate()
    {
        $record=User::model()->findByAttributes(array('username'=>$this->username));
        if($record===null)
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        else if($record->password!==md5($this->password))
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else
        {
            $this->_id=$record->id;
            $this->setState('title', $record->title);
            $this->errorCode=self::ERROR_NONE;
        }
        return !$this->errorCode;
    }
 
    public function getId()
    {
        return $this->_id;
    }
}

注意:Yiiデフォルトのコード、Yii::app()->user->idは、私たちが望んでいるユーザーIDではなく、ユーザー名を返します.したがってuseridentityクラスでは、ログインユーザのIDを変数で格納し、getID()メソッドを再ロードして正しいユーザIDを返します.