出于组织的考虑,我想使用不同的表来检查身份验证组件,但它并不常用。虽然我最初可以说:
$this->Auth->userModel = "CoreUsers"
加上将loginAction设置为我正确的MVC
看看那个表只是为了确认它在那里,但登录不起作用,它只会返回一个不正确的密码。身份验证组件中发生了一些事情;我不知道是什么让它失败了。当我将表格重命名为“用户”时,它可以正常工作。
另一部分是我更喜欢实际使用'email'的列名而不是'username',因为这正是我正在使用的。
我很幸运找到一个完整的教程和参考集,以便与CakePHP 2.x成功完成这两项工作。前进的方向是什么?
参考文献:
Stack Overflow问题 How do I use a table other than "Users" for CakePHP's AuthComponent?
Stack Overflow问题 CakePHP - 'AuthComponent' with a different model name (not 'User')
(我找了答案,但我从来没有得到完整的答案。)
答案 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。