ログインに追加の条件を付与する「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処理では、パスワード間違えなどのログインエラーも、追加の条件でログインエラーとなった場合も同じ戻り値であるため見分けることができません。

_findUser
/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でリファクタリングが行われ、ガラッと変わっているみたいですね。

  • このエントリーをはてなブックマークに追加

関連記事

no image

radioボタンを実装

Radioボタンの実装は、セレクトボックスとほぼ同じです。 個人的にはラジオボタンをすすんで使用することは少ないのですが、2択くらいの選択肢であれば非常に便利ですよね。 今回は、その実装方法 デモ

Syslogログエンジン

2.4から「Syslog」ログクラスが追加され、簡単にSyslogを使用できるようになりました。 CakePHP側の設定はbootstrap.php内のCakeLogコンフィグのengineを'Sy

コントローラ内でバリデーション処理を呼び出す

CakePHPでは、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。

アップロードファイルのバリデーションルール

CakePHP 2.2や2.3になってファイルアップロードに対するルールがコアバリデーションに追加されているようで、まとめてみました。 コアバリデーション 関連しそうなルールは以下の4つの

Blowfishを使用してハッシュ化する

使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま

CakeEmailでメール送信(@gmail)

CakePHP 2になって追加されたクラスCakeEmailがシンプルに使えます。これを使用してメール送信を行う処理を実装してみました。 CakeEmailクラスの読み込み /app/Config

ユーザ登録(仮登録・メール・本登録)

以前1.3版で投稿した「ユーザ登録」処理の2.x版を作成しました。フローは同じで以下のようにします。 1. メールアドレス・パスワードでユーザ登録 2. この時点では仮登録として、本登録用のU

複数ファイルアップロードフォーム

CakePHP 2.0からはHTML5が標準でサポートとなり、複数ファイルアップロードのためのフォーム記述が容易になりました。 View (ビュー) 配列 Array (

CSS/JSをひとまとめにして軽量化するプラグイン「Minify plugin for CakePHP」

「Minify plugin for CakePHP」は、インクルードするCSSもしくはJSファイルをひとまとめにしてキャッシュ化してくれるプラグインです。 導入 ダウンロード・解凍し

Jsヘルパーを使用してAjax更新

更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。デモ head

Comment

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    PAGE TOP ↑