如何配置CakePHP的$this-> Auth-> login()以使用自定义密码hasher
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何配置CakePHP的$this-> Auth-> login()以使用自定义密码hasher,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2934字,纯文字阅读大概需要5分钟。
内容图文
![如何配置CakePHP的$this-> Auth-> login()以使用自定义密码hasher](/upload/InfoBanner/zyjiaocheng/817/d22d6be39f1647018745e95b8f4a7ba0.jpg)
CakePHP v.2.4 ……
我正在关注this documentation尝试设置Auth组件以使用我的自定义密码哈希类:
App::uses('PHPassPasswordHasher', 'Controller/Component/Auth');
class AppController extends Controller {
// auth needed stuff
public $components = array(
'Session',
'Cookie',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array('username'=>'email', 'password'=>'password'),
'passwordHasher' => 'PHPass'
)
),
在我的UsersController :: login()里面我调试了$this-> Auth-> login();并且它总是返回false,即使我提交了正确的电子邮件/密码.
(注意:对我来说看起来很奇怪,login()没有参数,但是文档似乎暗示它会自动查看请求数据.如果我的配置没有正确地检查它,这将是有意义的. User.email字段代替用户名.)
提交的登录表单中的帖子数据如下所示:
array(
'User' => array(
'password' => '*****',
'email' => 'whatever@example.com'
)
)
我错过了什么?
UPDATE2
我开始怀疑使用默认的哈希算法而不是我的自定义类.我试图匹配文档中的示例,但他们对如何执行此操作非常模糊.
这是app / Controller / Component / Auth / PHPassPasswordHasher.php的内容
<?php
App::import('Vendor', 'PHPass/class-phpass'); //<--this exists and defines PasswordHash class
class PHPassPasswordHasher extends AbstractPasswordHasher {
public function hash($password) {
$hasher = new new PasswordHash( 8, true );
return $hasher->HashPassword($password);
}
public function check($password, $hashedPassword) {
debug('PHPassHasher'); die('Using custom hasher'); //<--THIS NEVER HAPPENS!
$hasher = new new PasswordHash( 8, true );
return $hasher->CheckPassword($password, $hashedPassword);
}
}
AHA! debug()永远不会出现……所以我很确定问题出在我的自定义hasher配置上.
UPDATE3
补充线索:我通过设置各种默认哈希算法(例如:“简单”,“Blowfish”)和创建用户进行了实验.显示在数据库中的哈希值都是相同的,它告诉我完全忽略了我的配置设置.
UPDATE4
我在/lib/Cake/Controller/Component/Auth/BaseAuthenticate.php的构造函数中调试了$this->设置,我的自定义哈希设置在那里:
array(
'fields' => array(
'password' => 'password',
'username' => 'email'
),
'userModel' => 'User',
'scope' => array(),
'recursive' => (int) 0,
'contain' => null,
'passwordHasher' => 'PHPass'
)
解决方法:
您需要将密码hasher类重命名为具有后缀“PasswordHasher”,并且仅在’className’参数中提供非后缀名称.
例如:
<?php
App::import('Vendor', 'PHPass/class-phpass'); //<--this exists and defines PasswordHash class
class PHPassHasherPasswordHasher extends AbstractPasswordHasher {
// functions
}
docs中的示例将classname设置为’Simple’,然后加载’SimplePasswordHasher’.
你可能会发现拥有PHPassHasherPasswordHasher的名字有点傻,这取决于你想要的它.也许PHPassPasswordHasher可能更合适(然后使用classname参数’PHPass’).
编辑:当一个接一个地使用多个大写字母(例如PHPass)时,似乎Cake有问题,所以正确的方法是将密码hasher类更改为以下内容:
<?php
App::import('Vendor', 'PHPass/class-phpass'); //<--this exists and defines PasswordHash class
class PhpassPasswordHasher extends AbstractPasswordHasher {
// functions
}
…并确保文件名与类名匹配:PhpassPasswordHasher.php.
感谢SDP的讨论,我今天学到了一些东西!
内容总结
以上是互联网集市为您收集整理的如何配置CakePHP的$this-> Auth-> login()以使用自定义密码hasher全部内容,希望文章能够帮你解决如何配置CakePHP的$this-> Auth-> login()以使用自定义密码hasher所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。