CakePHP 2.x验证条件

时间:2012-09-11 19:09:50

标签: cakephp authentication login conditional-statements

在我的用户身份验证中,我需要为登录设置条件(已验证= 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:第一个是上面的setFlash,第二个是常规authError。

我检查了Docs和stackoverflow,但是我发现关于这个主题的信息非常少。

5 个答案:

答案 0 :(得分: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 finder option自3.1起可用。在此之前,您可以使用scopecontain选项修改查询。

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

答案 1 :(得分:2)

$this->Auth->authenticate = array(
    AuthComponent::ALL => array(
        'scope' => array('User.verified' => '1'),
   ),
);

答案 2 :(得分:1)

$this->Auth->authenticate = array(
      'Form' => array(
                'scope' => array('User.verified' => '1')
      )
);

答案 3 :(得分:0)

假设CakePHP文档正确Auth::userScope已重命名为Auth::scope,那么您现在可以执行以下操作:

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

Configuring Auth in CakePHP 2.x

希望这有帮助。

答案 4 :(得分:0)

试试这个:

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