在我的用户身份验证中,我需要为登录设置条件(已验证= 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,但是我发现关于这个主题的信息非常少。
答案 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起可用。在此之前,您可以使用scope
和contain
选项修改查询。
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');