9

私のユーザー認証では、ログインが発生するように条件 (検証済み = 1) を設定する必要があります。私は次のようにできるはずだと知っています:

$this->Auth->userScope = array('User.verified' => '1');

AppController と UsersController beforeFilter 関数でこれを試しましたが、何もしません。このために設定する必要があるものは他にありますか?

私はやった(AppController):

public function isAuthorized($user) {

if ($user['verified'] == '0') { 
$this->Session->setFlash('You need to verify your Account first.');
return false;
}

return false;
}

適切な (userScope) 方法があるはずなので、これは洗練されていないようです。さらに、検証時に 2 つの Flash を取得する = 0: 最初の 1 つは上記の setFlash で、2 番目の 1 つは通常の authError です。

Docs と stackoverflow の両方を確認しましたが、このトピックに関する情報はほとんど見つかりませんでした。

4

5 に答える 5

10

CakePHP 2.x:

public $components = array(
    'Auth' => array(
        'loginAction' => array(
            'controller'    => 'users',
            'action'        => 'login'
        ),
        'authError' => 'Je hebt geen toegang tot dit gedeelte',
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email'),
                'scope' => array('is_admin' => '1')
            ),

        )
    ),
    'Session'
);

更新: CakePHP 3.1 の場合、ファインダーoptionは 3.1 以降で利用できます。それ以前は、scopeおよびcontainオプションを使用してクエリを変更できます。

http://book.cakephp.org/3.0/en/controllers/components/authentication.html#customizing-find-query

于 2012-12-13T11:26:07.860 に答える
2
$this->Auth->authenticate = array(
    AuthComponent::ALL => array(
        'scope' => array('User.verified' => '1'),
   ),
);
于 2012-09-11T20:03:56.367 に答える
0

CakePHP のドキュメントが正しいと仮定すると、Auth::userScope名前が に変更されたAuth::scopeので、次のようにします。

$this->Auth->scope = array ('User.active' => '1');

CakePHP 2.x で認証を設定する

お役に立てれば。

于 2012-09-11T20:04:07.663 に答える
0

これを試して:

$this->Auth->userScope = array('User.verified = 1');

于 2012-09-11T20:35:09.007 に答える