Laravel 5.1更改密码功能

时间:2015-09-15 06:49:59

标签: php laravel-5.1 bcrypt change-password

我需要为我的laravel应用程序更改密码功能。 我创建了这个视图:

{!! Form::password('old_password', ['class'=>'form-control']) !!}
{!! Form::password('password', ['class'=>'form-control']) !!}
{!! Form::password('password_confirmation', ['class'=>'form-control']) !!}

然后在我的控制器中,我要检查为old_password输入的值是否与用户的当前密码相同。

if(bcrypt($request->old_password) !=$user->password) return redirect()->back()

问题是上述情况总是如此。即使用户输入有效密码,这个条件也会返回真实状态! 为什么会这样? 顺便说一句,我在用户模型中散列密码:

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

2 个答案:

答案 0 :(得分:6)

bcrypt()每次都会产生随机盐。为了检查密码,我应该使用Hash :: check()。

Link to docs

docs中的示例:

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

答案 1 :(得分:4)

有一个名为Auth::validate($credentials)的有用身份验证功能,您可以在其中传递[username, password][email, password]组合。这将检查提供的$credentials是否有效而不登录用户。

所以在AuthController中你会检查:

...
$credentials = [
    'email' => $request->get('email'),
    'password' => $request->get('old_password'),
];

if(\Auth::validate($credentials)) {
    // TODO: Old password is correct, do your thing
    // Change password and login, OR
    // Send them to the login page
}

return redirect()->back()->withError('Incorrect old password');

希望这有帮助。

干杯!