Laravel Hash::check() 总是返回 false

2022-08-30 17:22:52

我有个人资料表格供用户可以编辑自己的个人资料。在这个表格中,我有当前的密码。必须从 seved 匹配到数据库。

形式:

{{ Form::password('currPassword', array('id'=>'currPassword')) }}

我想在控制器中有这个功能来检查这个与数据库。

$data = User::find($id);
if( ! Hash::check( $data->password , Input::get('currPassword') ) )
{
    return Redirect::to('/admin/profile')
        ->with('message', 'Current Password Error !')
        ->withInput();
}

哈希密码进入数据库是可以的,输入后必须返回,但始终返回。123456123456currPasswordTRUEFALSE


答案 1

您使用了错误的参数顺序。这是,而不是相反。Hash::check($input, $hash)

简短的修补示例:

[1] > $pw = 123456;
// 123456
[2] > $hashed = Hash::make($pw);
// '$2y$10$xSugoyKv765TY8DsERJ2/.mPIOwLNdM5Iw1n3x1XNVymBlHNG4cX6'
[3] > Hash::check($hashed, $pw);
// false
[4] > Hash::check($pw, $hashed);
// true

答案 2

我有同样的问题,并像这样解决它:

我发现我在我的RegisterService类中使用了Hash::make函数,更重要的是我已经在我的用户模型中使用了setPasswordAttribute函数,这很快就被遗忘了:

class User extends Model implements AuthenticatableContract, AuthorizableContract
{
   ...

    /**
     * @param $value
     */
    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = Hash::make($value);
    }
}

因此,密码被双重散列,当然每个Hash::check调用都不正确并返回false。


推荐