ログインに追加の条件を付与する「scope」
ユーザ登録では、仮登録処理(status=1)から送付したメール内のリンクをクリックしてもらい本登録(status=0)を行ってもらう実装をしました。仮登録の状態ではログインできないように実装するには、1.3では「userScope」を使用しました(記事)が、2.xでは「scope」に変更されているようです。
Authコンポーネントを呼び出す際に以下のように定義して下さい。
2.0から「Authenticate type」というものが追加されており、今回はフォームからpostされた認証に対して追加を行うため'Form'に追加しています。(参考)
var $components = array( 'Auth' => array( 'authenticate' => array( 'Form' => array( // 認証されるには、「Userのstatusが0である必要がある」を追加する 'scope' => array( 'User.status' => 0) ) ) ), );
その条件専用のエラーメッセージを返したい
と思ったのですが、Auth->login処理では、パスワード間違えなどのログインエラーも、追加の条件でログインエラーとなった場合も同じ戻り値であるため見分けることができません。
/lib/Cake/Controller/Component/Auth/BaseAuthenticate.phpを参照
どうしてもそれ専用のものを出したかったら、別に確認する処理を追加すればいいです。(が、ここまでやると「scope」自体の存在意義がなくなってしまいますね)
public function login() { // ログイン成功 if ($this->Auth->login()) { return $this->redirect( $this->Auth->redirect()); // ログイン失敗 } else { // Userのstatusを取得 $user_state = $this->User->field( 'status', array( 'username' => $this->data['User']['username'])); if ($user_state != 0){ $this->Session->setFlash( '本登録して下さい'); } else { $this->Session->setFlash( 'ユーザ名もしくはパスワードが違います'); } } }
また、2.0では、$this->Auth->loginErrorは廃止されましたので独自で設定する必要があります。
Authコンポーネントは、2.xでリファクタリングが行われ、ガラッと変わっているみたいですね。
関連記事
-
Markdown Plugin
「Markdown CakePHP Plugin」は、MarkDown書式をレンダリングしてくれるビューヘルパーです。MarkDownについて勉強しているうちに出会ったので試し打ちです。 ダウンロー
-
CakePHP 2.x インストール
現在まで私が商用・非商用にリリースしているCakePHPアプリケーションは全て1.3.xベースで作成しています。 まだまだロードマップ的には大丈夫そうですが、お客さん向けに納品しているアプリケーショ
-
radioボタンを実装
Radioボタンの実装は、セレクトボックスとほぼ同じです。 個人的にはラジオボタンをすすんで使用することは少ないのですが、2択くらいの選択肢であれば非常に便利ですよね。 今回は、その実装方法 デモ
-
recursive設定によるfind()性能改善
CakePHPでは、モデルにアソシエーションを設定している場合、recursive(=>joinする階層)はデフォルトで0に設定されています。「recursiveゼロ」の意味するところとは、「1跨ぎま
-
数値系バリデーション
CakePHP 2になっていくつか数値用バリデーションルールが追加されています。 数値用 (コア)バリデーション decimal - 十進数であること numeric - 数値であること
-
ネストしたリストを出力「nestedList」
DBやJSONからデータを取得して、そのデータをもとにメニュー表示などネストしたリストを出力させたい場合に「nestedList」が便利です。 ヘルパーに渡すデータは連想配列である必要があります。(
-
多言語サイト向けに翻訳ファイルを使って翻訳を行う
CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook
-
FullCalendarを使用してカレンダーアプリケーション
カレンダーアプリケーションを作成するため、カレンダー表示できるプラグインを探索して出会ったFullcalendarを試してみました。シンプルに使用できる上に、オプションがかなり豊富です。ダウンロード
-
ユーザ登録(仮登録・メール・本登録)
以前1.3版で投稿した「ユーザ登録」処理の2.x版を作成しました。フローは同じで以下のようにします。 1. メールアドレス・パスワードでユーザ登録 2. この時点では仮登録として、本登録用のU
-
パス定数と変更方法やURLの取得
CakePHPは基本的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。
Comment
[…] いる場合は ログインができるという形にできます。 仮登録というものがあった場合には使えそうですね。 (参考) ログインに追加の条件を付与する「scope」 http://kwski.net/cakephp-2-x/1112/ […]
scopeでできるんですね。 / ログインに追加の条件を付与する「scope」
http://t.co/9zGPCGTMxE