ログインに追加の条件を付与する「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でリファクタリングが行われ、ガラッと変わっているみたいですね。
関連記事
-
-
selectボックスを実装
今まで、selectボックスのgroupを作成するのにSet::Combineを使用していましたが、意外と簡単にできることに気付いてしまったので、ご紹介。(自分だけ知らなかったことに気付いた と言った
-
-
Markdown Plugin
「Markdown CakePHP Plugin」は、MarkDown書式をレンダリングしてくれるビューヘルパーです。MarkDownについて勉強しているうちに出会ったので試し打ちです。 ダウンロー
-
-
FormヘルパーのMagicOption (マジックオプション)
Formヘルパーでは、「フィールド名」,「テーブルカラムのデータ型」もしくはモデルの「バリデーション設定」によりフォーム要素を決定したり、自動で属性を付与する「マジックオプション」と呼ばれるものがある
-
-
CakePHP 2.x インストール
現在まで私が商用・非商用にリリースしているCakePHPアプリケーションは全て1.3.xベースで作成しています。 まだまだロードマップ的には大丈夫そうですが、お客さん向けに納品しているアプリケーショ
-
-
ログローテーション
CakePHP 2.xではbootstrap.php内にあらかじめアプリケーションログの設定が書かれています。2.xで日付ごとにログファイルが切り替わるよう設定してみました。 日ごとにログを切り替え
-
-
Blowfishを使用してハッシュ化する
使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま
-
-
checkボックスを実装
selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TA
-
-
RSSフィードの取得
コンロトーラ public function getrssfeed() { try { $newsItems = $this->Rss->read( 'http://
-
-
テーブルからランダムにデータを取り出す(find)
CakePHPでテーブルから特定件数のレコードをランダムに取得するには以下のように指定するとできます。 $this->data = $this->Bulkdata->find( 'all',
-
-
(メール・URL・電話・郵便・IP) データ バリデーション
今回は、プロフィール情報に使用されるデータに絞ったバリデーションルールです。 バリデーションルール 以下の5つのバリデーションルールがコアに用意されています。 email メールアドレス



Comment
[…] いる場合は ログインができるという形にできます。 仮登録というものがあった場合には使えそうですね。 (参考) ログインに追加の条件を付与する「scope」 http://kwski.net/cakephp-2-x/1112/ […]
scopeでできるんですね。 / ログインに追加の条件を付与する「scope」
http://t.co/9zGPCGTMxE