我为我的应用创建了用户个人资料。在此用户配置文件中,用户可以像电子邮件地址,密码,位置,公司名称等更新其信息。如果用户想要更改其中一个信息,用户需要提供当前密码。我将验证用户提供的当前密码是否正确。错误是我无法验证用户提供的当前密码。以下是我的用户控制器代码的一部分。
if($request['current_pwd'])
{
if($request['new_pwd'])
{
if($user->password == bcrypt($request['current_pwd']))
{
$user->password = bcrypt($request['new_pwd']);
}else{
return redirect()->back()->with(['message' => 'Wrong current password !']);
}
}elseif($user->password == bcrypt($request['current_pwd']))
{
$user->save();
}else{
return redirect()->back()->with(['message' => 'Wrong Current Password ! Check Again!']);
}
}else{
return redirect()->back()->with(['message' => 'Please enter your current password !']);
}
如果用户想要更改当前密码,用户必须输入当前密码,新密码,。如果当前密码等于db中存储的密码,则将更新新密码。如果没有,请返回消息。
答案 0 :(得分:3)
试试这个 首先在控制器中包含Hash命名空间,
use Illuminate\Support\Facades\Hash;
并使用以下条件确保输入的当前密码有效
if($request->has('current_password')){
$current_password = $request->input('current_password');
if(!Hash::check($current_password,Auth::user()->password)){
return redirect()->back()->withInput()->withErrors([
'current_password' => 'You current password doesnot match with the logined user\'s !'
]);
}
}
答案 1 :(得分:1)
您应该将加密的“当前密码”条目与用户已有的密码相匹配。您可以使用函数Auth::user()
所以你的情况会是:
if(bcrypt($request['current_pwd']) == Auth::user()) {
// Do password change
} else {
// Invalid password error
}
还有另一个功能:getAuthPassword()
可以通过指定用户ID来使用,如下所示:
$user = User::find('1');
$user->getAuthPassword();
这将获取用户ID 1
的密码答案 2 :(得分:0)
由于腌制!这种$user->password == bcrypt($request['current_pwd']
检查不起作用!
尝试制作相同密码的哈希值,你会得到不同的哈希值!
所以在laravel 5.2中这样检查
$crypt = new Hashing\BcryptHasher();
$match = $crypt->check($user->password, $request['current_pwd']);