Laravel 5.1修改密码功能


Laravel 5.1 change password functionality

我需要为我的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()

问题是上述条件总是为真。这意味着即使用户输入了一个有效的密码,这个条件也会返回true!为什么会这样呢?顺便说一下,我在用户模型中散列了密码:

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

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

链接到docs

文档中的示例:

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

有一个有用的身份验证函数称为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');

希望对你有帮助。

干杯!