为什么 Laravel `bcrypt` 或 Hashing a random string password 在检查时不匹配?
Why Laravel `bcrypt` or Hashing a random string password is mismatched when checking?
我正在生成一个随机字符串,我想将其保存或更新为 Laravel
应用上现有用户的新密码。
我在控制器中是这样操作的:
public function changePassword(){
// Generate new Password
$newPassword = bin2hex(openssl_random_pseudo_bytes(16/2, $crypto));
$user = Auth::user();
$user->password = bcrypt($newPassword);
$user->save();
if(Hash::check($newPassword, $user->password)){
return response($user);
}
return response('Password Mismatched', 401);
}
回复给了我 "Password Mismatched" 401 error
。为什么
是不是它给了我一个不匹配的密码?
像这样将密码保存到数据库时使用Hash::make()
,
public function changePassword(){
// Generate new Password
$newPassword = bin2hex(openssl_random_pseudo_bytes(16/2, $crypto));
$user = Auth::user();
$user->password = Hash::make($newPassword);
$user->save();
if(Hash::check($newPassword, $user->password)){
return response($user);
}
return response('Password Mismatched', 401);
}
这可能有效。
根据您的 User
模型的设置方式,它可能会自动调用 password
属性上的 bcrypt()
或 Hash::make()
,当与手动结合使用时调用该函数会导致 "hash of a hash" 情况。为避免这种情况,只需删除对该函数的手动调用并允许 User
模型自动处理它:
$user = Auth::user();
$user->password = $newPassword;
$user->save();
我正在生成一个随机字符串,我想将其保存或更新为 Laravel
应用上现有用户的新密码。
我在控制器中是这样操作的:
public function changePassword(){
// Generate new Password
$newPassword = bin2hex(openssl_random_pseudo_bytes(16/2, $crypto));
$user = Auth::user();
$user->password = bcrypt($newPassword);
$user->save();
if(Hash::check($newPassword, $user->password)){
return response($user);
}
return response('Password Mismatched', 401);
}
回复给了我 "Password Mismatched" 401 error
。为什么
是不是它给了我一个不匹配的密码?
像这样将密码保存到数据库时使用Hash::make()
,
public function changePassword(){
// Generate new Password
$newPassword = bin2hex(openssl_random_pseudo_bytes(16/2, $crypto));
$user = Auth::user();
$user->password = Hash::make($newPassword);
$user->save();
if(Hash::check($newPassword, $user->password)){
return response($user);
}
return response('Password Mismatched', 401);
}
这可能有效。
根据您的 User
模型的设置方式,它可能会自动调用 password
属性上的 bcrypt()
或 Hash::make()
,当与手动结合使用时调用该函数会导致 "hash of a hash" 情况。为避免这种情况,只需删除对该函数的手动调用并允许 User
模型自动处理它:
$user = Auth::user();
$user->password = $newPassword;
$user->save();