CakePHP - 身份验证组件,使用不同的表名和列名

时间:2012-03-29 16:02:18

标签: cakephp-2.0

出于组织的考虑,我想使用不同的表来检查身份验证组件,但它并不常用。虽然我最初可以说:

$this->Auth->userModel = "CoreUsers"加上将loginAction设置为我正确的MVC 看看那个表只是为了确认它在那里,但登录不起作用,它只会返回一个不正确的密码。身份验证组件中发生了一些事情;我不知道是什么让它失败了。当我将表格重命名为“用户”时,它可以正常工作。

另一部分是我更喜欢实际使用'email'的列名而不是'username',因为这正是我正在使用的。

我很幸运找到一个完整的教程和参考集,以便与CakePHP 2.x成功完成这两项工作。前进的方向是什么?

参考文献:

  1. Stack Overflow问题 How do I use a table other than "Users" for CakePHP's AuthComponent?

  2. Stack Overflow问题 CakePHP - 'AuthComponent' with a different model name (not 'User')

  3. (我找了答案,但我从来没有得到完整的答案。)

2 个答案:

答案 0 :(得分:2)

确保您的数据库表“core_users”和模型“CoreUser”存在。

设置组件时,可以在此处设置登录/注销重定向。

var $components = array(
        "Auth" => array(
             'loginRedirect' => array('controller' => 'dashboard', 'action' => 'index'),
             'logoutRedirect' => array('controller' => 'core_users', 'action' => 'login')
              ),
       "Session");

现在在更好的过滤器中你可以输入以下内容

function beforeFilter(){
      $this->Auth->authenticate = array(
         AuthComponent::ALL => array('userModel' => 'CoreUser', 'scope' => array("CoreUser.status" => 1), "fields" => array("username" => "email", "password" => "your_password_field"), 'Form', 'Basic'
                                        );
}

以上示例您可以忽略状态,如果您需要传递登录验证的任何其他信息,您可以使用它。现在您可以删除“基本”,如果您只需要表单验证。 我希望这会奏效。

答案 1 :(得分:1)

首先,模型名称通常是单数。你确定你的意思CoreUser并不代表core_users表吗?

其次,您可以通过在身份验证设置中设置email密钥来使用username字段而不是fields

public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'userModel' => 'CoreUser',
                'fields' => array('username' => 'email')
            )
        )
    )
);

有关详细信息,请参阅the book