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

时间:2014-02-01 07:42:38

标签: php laravel laravel-4

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

形式:

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

我希望在Controller中使用此功能来检查数据库。

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

哈希123456密码进入数据库是可以的,并且123456放入currPassword后必须返回TRUE但始终返回FALSE

5 个答案:

答案 0 :(得分:37)

你使用了错误的参数顺序。这是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

答案 1 :(得分:3)

  

Hash :: check()有两个参数,一个是平面密码和   另一个是哈希密码。如果密码与哈希匹配则会   返回true。

Hash::check(normal_password,hashed_password);

示例:

Hash::check('123456a','$2y$10$.XB30GO4jn7bx7EauLrWkugIaCNGxiQCgrFTeFDeSSrGdQYd6Rneq');

答案 2 :(得分:2)

我遇到了同样的问题,并像这样解决了它:

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

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

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

因此,密码被双重哈希处理,并且当然每个Hash :: check调用都不正确并返回false。

答案 3 :(得分:0)

尽管以上答案对所提供的问题均有效,但我会添加更多说明以提供详细见解

验证哈希密码

check方法使您可以验证给定的纯文本字符串是否与给定的哈希相对应。但是,如果您使用的是Laravel随附的LoginController,则可能不需要直接使用它,因为此控制器会自动调用此方法:

if (Hash::check('plain-text', $hashedPassword)) {
    // The passwords match...
}

check()方法在HasherInterface中声明

此方法是针对哈希检查给定的纯值。

 bool check(string $value, string $hashedValue, array $options = array())

对照哈希检查给定的纯值。

参数

字符串$ value
字符串$ hashedValue
数组$ options

返回值

布尔

例如:

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

答案 4 :(得分:0)

我遇到了同样的问题,花了2个小时解决这个问题后,发现在更新密码之前我对密码进行了两次哈希处理。
1.在PasswordResetController中,
2.在用户模型中,我具有以下功能:

public function setPasswordAttribute($password)
{   
    $this->attributes['password'] = bcrypt($password);
}