这是Login with username or email with Cakephp 3的后续问题:是否可以首先检查是否通过用户名找到用户,如果不能,则尝试通过电子邮件找到用户名?
在这个问题的答案中概述的解决方案在cakephp-4中不再起作用,因为它们依赖于如下操作请求对象:$this->request->data['email'] = $this->request->data['username'];
。这在cakephp-4中不再可能。
有没有一种方法可以在不操作request-object的情况下对用户进行身份验证呢?我唯一能想到的是使用javascript将username-input的内容复制到一个隐藏的email-input中,这样就可以在请求中设置email-field而不必在服务器端操作请求。然而,这似乎是一个非常笨拙、脆弱的解决方案。
1条答案
按热度按时间z9zf31ra1#
在使用AuthComponent时,我使用了Tools.MultiColumn(https://github.com/dereuromark/cakephp-tools/blob/master/docs/Auth/MultiColumn.md),它仍然可以正常工作。
例如,请参见https://github.com/dereuromark/cakephp-sandbox/blob/master/src/Controller/AppController.php#L57
对于Auth插件,更好的选择是使用数组进行配置,如插件文档中所述:
fields:用于查找的字段。默认值为['username' =〉' username ','password' =〉' password ']。您也可以将用户名设置为数组。例如,使用['username' =〉['username',' email '],'password' =〉' password ']将允许您匹配用户名或电子邮件列的值。