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)方法来做到这一点,而且我现在在验证 = 0 时得到两个 Flash:第一个是上面的 setFlash,第二个是常规的 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 finderoption从 3.1 开始可用。在此之前,您可以使用scopecontain选项来修改查询。

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 回答
1
$this->Auth->authenticate = array(
      'Form' => array(
                'scope' => array('User.verified' => '1')
      )
);
于 2014-05-03T12:10:27.197 回答
0

假设 CakePHP 文档是正确Auth::userScope的被重命名为Auth::scope所以现在你会做这样的事情:

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

在 CakePHP 2.x 中配置 Auth

希望这可以帮助。

于 2012-09-11T20:04:07.663 回答
0

尝试这个:

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

于 2012-09-11T20:35:09.007 回答