1

问题:我想根据登录时的用户状态(使用 ajax)向用户显示不同的错误消息。例如:如果用户状态为待处理,我想显示一条消息,或者如果用户状态被禁用,我想显示另一条消息。只有活动用户才能登录。

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

  1. 鉴别方法

    或者

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

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

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

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

4

1 回答 1

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->Auth->user 中,您可以稍后对其进行询问。

如果您遇到困难,CookBook有很多关于此的详细信息。

于 2012-10-18T14:54:44.403 回答