2012年4月8日

Yii Framework: 3通りを簡単に切り替えられるログインの実装

ログイン機能を実装するときに、下の 3 つを簡単に切り替えられるものがあると便利だなと思い作ってみました。基本的なログイン機能の実装方法は Yii Guide: ログインとログアウトYii Blog Demo: ユーザ認証 などが参考になります。

  • ユーザ名 と パスワード
  • メールアドレス と パスワード
  • ユーザ名またはメールアドレス と パスワード

まず config/main.php の params に salt, login パラメータを追加。 続いて Gii で User モデルを作って hashPassword() というメソッドだけ追加しておきます。
次に yiic webapp したときにもともとある Useridentity.php を編集します。 だいたいガイドに載っているものと似ていますが Yii::app()->params['login'] がセットされていれば、 findByAttributes の attribute のキーとして使います。セットされていなければ ユーザ名またはメールアドレス が使われるので、@マークがあればメールアドレスを使い、なければユーザ名を使う、という形になります。

その他は先ほど User モデルで書いた hashPassword() を使ってフォームで入力されたパスワードをハッシュ化して、user テーブルにあるパスワードと一致すれば ERROR_NONE、すなわちログインできる状態になります。

次に LoginForm モデルを作成。
これもだいたいはもともとある LoginForm.php と似ていて、基本的には $username プロパティを $login に変更するだけです。ラベルの切り替えは Yii::app()->params['login'] の値によって動的に変更できるように init() で設定しています。重要なのは、LoginValidator() の $this->addError()、ログインフォームのどこが間違っているかはユーザには知らせてはいけないので null を指定します。

あとはコントローラとビューです。これは特に難しいところはないので説明は省略。

0 件のコメント:

コメントを投稿