不确定有什么问题,但它说我的电子邮件/密码不正确.这仅在我的密码经过哈希处理时发生.只是寻找一个简单的密码哈希,我不需要复杂的东西.
在我的UserIdentity中.我尝试了几种方法,但没有一种方法可行.
//...stuff here
$loginSuccess = false;
if ($user->hashed === 'Y') {
$loginSuccess = (md5($this->password) === $user->password);
//$hash= CPasswordHelper::hashPassword($this->password);
// if(CPasswordHelper::verifyPassword($user->password, $hash))
// $loginSuccess=true;
} else {
$loginSuccess = ($this->password === $user->password);
}
// Login failure
if($loginSuccess==false) {
//...stuff here
在我的控制器中:
$model=new LoginForm;
// if it is ajax validation request
if(Yii::app()->request->isAjaxRequest)
{
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
$password = $_POST['LoginForm']['password'];
$hash = CPasswordHelper::hashPassword($password);
if (CPasswordHelper::verifyPassword($model->password, $hash))
{
if($model->validatePassword($password) && $model->login())
{ //do stuff if okay
加入网站后:
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
$hash = CPasswordHelper::hashPassword($_POST['User']['password']);
$model->password = $hash;
if($model->validate())
最佳答案 检查代码/问题中的前两行注释行
$hash= CPasswordHelper::hashPassword($this->password); and
if(CPasswordHelper::verifyPassword($user->password, $hash))
在这里,您正在散列用户输入密码,并且您正在使用散列字符串验证散列字符串.这是一个简单的错误.在verifyPassword的情况下,您必须使用哈希字符串验证用户输入密码.
hashPassword从用户密码对和随机盐生成安全哈希.这就是您存储在数据库中的内容.在您的代码中,$user-> password返回用户密码的哈希值.
但是verifyPassword使用您存储在数据库中的哈希验证在登录页面中输入的密码.现在检查编码……
创建用户时
$passHash=CPasswordHelper::hashPassword(trim($_POST['LoginForm']['password']));
//Store this hash in Database
处理登录时
//user input
$pass='pa123456';
//which is comming from db. In your case $user->password
$hash='$2a$13$35cIyyLPznkG8xK.d0NbW.hBGl5fWDYaleZAN4cYECoNZ1C6BLaA6';
//verify password
if (CPasswordHelper::verifyPassword($pass, $hash))
{
echo "good";
}
else
{
echo "Bad";
}