首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Yii中phpass身份验证失败

在Yii中phpass身份验证失败
EN

Stack Overflow用户
提问于 2013-02-06 01:13:30
回答 1查看 228关注 0票数 3

我正在尝试在Yii中实现phpass身份验证,但是每次都失败了。我已经阅读了很多SO文章,但还没有找到解决方案,所以我想这一定是一个Yii特定的问题。

在User.php中,我保存了散列密码:

代码语言:javascript
复制
public function beforeSave() {
    $phpass = new PasswordHash(8, false);
    $hash = $phpass->HashPassword($this->user_pass);
    $this->user_pass = $hash;
    return true;
}

在UserIdentity中,我正在检查密码:

代码语言:javascript
复制
public static function isPasswordValid($plainPass, $hashedPass) {
    $phpass = new PasswordHash(8, false);
    $isValid = $phpass->CheckPassword($plainPass, $hashedPass);


    if($isValid){
        return true;
    }

    return false;
}

$hashedPass从数据库中出来,plainPass是用户刚在表单中输入的内容,但$isValid总是返回false。事实上,我从数据库中取出了散列密码,并手动应用它,但它仍然失败:

代码语言:javascript
复制
$isValid = $phpass->CheckPassword('password', '$2a$08$P9X8duz7S8LOysz1XIn3fe/YYW3dwAs2busSBIX/QnZhKH/R9/H1S')

我已经检查过了,以确保在插入时数据库中的散列密码没有被截断,并且没有被截断...我已经根据另一篇SO文章将我的密码字段调整为varchar 60,但这并没有帮助…

编辑:似乎如果我手动将散列粘贴到数据库字段中,则在生成散列后,身份验证将通过:

代码语言:javascript
复制
echo $phpass->HashPassword('password');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 01:44:10

问题可能出在beforeSave中。每次保存用户时,您都会对user_pass 进行哈希操作。如果您保存用户两次,您的密码将被哈希两次,因此无用。

我使用phpass和yii没有问题,但我只哈希密码,如果它是由用户手动设置。

仅当用户修改/设置密码时,才尝试对密码进行哈希处理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14713071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档