使用额外条件扩展cakephp auth组件

时间:2012-09-13 06:34:46

标签: cakephp-2.0

问题:我想根据登录时的用户状态向用户显示不同的错误消息(使用ajax)。例如:如果用户状态为挂起,我想显示一条消息,否则如果禁用用户状态,我想显示另一条消息。只有活跃用户才能登录。

经过一番搜索后发现我可以使用

  1. 识别方法

  2. 我应该在登录方法中使用“if ($this->Auth->login())”条件中的写条件。

  3. 如果我在自定义组件中使用第一个方法(将扩展auth),希望它只能返回true或false,对吧?它可以设置错误消息并返回,以便我可以从我的控制器获取它吗?

    如果我在允许用户登录后使用第二种方法,我应该检查状态,如果它不活动,我应该从Auth / Session中删除登录凭据。我怎样才能做到这一点 ?这是一个好方法吗?

    还有其他更好的解决方案吗?我正在使用cakephp2.0

1 个答案:

答案 0 :(得分:3)

我会为您的用户创建一个从BaseAuthenticate扩展的类,并在AppController中进行设置。

public $components = array(
    'Session',
    'Auth' => array(
        'loginRedirect' => ..... ,
        'logoutRedirect' => ..... ,
        'loginAction' => ..... ,
        'authenticate' => array('YourUsers'),
    )
);

然后创建类

<?php
App::uses('BaseAuthenticate', 'Controller/Component/Auth');

class YourUsersAuthenticate extends BaseAuthenticate {

    public function authenticate(CakeRequest $request, CakeResponse $response) {
        // your code goes in here
    }
}

您可以在身份验证中返回false以拒绝用户访问,也可以返回成功的对象,该对象将存储在$ this-&gt; Auth-&gt;用户中,您可以稍后进行interogate。

如果您遇到问题,CookBook会详细说明这一点。