我正在尝试从CakepHP设置新的身份验证方法。登录时,我在调试中收到缺少凭据的消息。在请求POST数据中,提交了电子邮件和密码字段。我是否缺少了什么?
/**
* Login method
*/
public function login()
{
$result = $this->Authentication->getResult();
// regardless of POST or GET, redirect if user is logged in
if ($result->isValid()) {
$redirect = $this->request->getQuery('redirect', ['controller' => 'Pages', 'action' => 'display', 'home']);
return $this->redirect($redirect);
}
// display error if user submitted and authentication failed
if ($this->request->is(['post']) && !$result->isValid()) {
$this->Flash->error('Invalid username or password');
}
}
public function getAuthenticationService(ServerRequestInterface $request, ResponseInterface $response)
{
$service = new AuthenticationService();
$fields = [
'username' => 'email',
'password' => 'password'
];
// Load identifiers
$service->loadIdentifier('Authentication.Password', compact('fields'));
// Load the authenticators, you want session first
$service->loadAuthenticator('Authentication.Session');
$service->loadAuthenticator('Authentication.Form', [
'fields' => $fields,
'loginUrl' => '/users/login'
]);
return $service;
}
编辑:在编辑了带有username/post字段的Form Authenticator选项后,我得到了以下内容
错误:未找到失败标识
SQL调试表明在Users表中找到了该记录。
SELECT
Users.id AS `Users__id`,
Users.email AS `Users__email`,
Users.password AS `Users__password`,
Users.role AS `Users__role`,
Users.created AS `Users__created`,
Users.modified AS `Users__modified`
FROM
users Users
WHERE
Users.email = 'my@my.com'
LIMIT
1
用户表结构
id Primary key int(11)
email varchar(255) utf8mb4_general_ci
password varchar(255) utf8mb4_general_ci
role varchar(255)
created datetime
modified datetime
3条答案
按热度按时间q43xntqr1#
修正了密码为纯文本的问题。添加了一个新用户,默认密码为哈希。
i34xakig2#
如果你还想知道你做了什么。在我的移民我有这个:
使用以下命令更改它:
而且它会起作用的。你必须把你的密码列的列类型设置为character_varying才能使它起作用。
yzxexxkh3#
一个可能的非常常见的错误是,在定义表的字段时,password***字段被声明为较小的长度(10-15个字符),而在使用身份验证组件时,密码将变成一个更大的***哈希,因此建议声明长度为255个字符的密码字段,以避免在尝试登录用户时带来不便。