我有个人资料表格供用户编辑自己的个人资料。在这种形式,我有当前的密码。必须从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
。
答案 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);
}