在Laravel 5.4中更改密码

时间:2017-03-04 03:38:01

标签: php laravel laravel-5 laravel-5.4

我已添加代码以更改我的webapp中的密码。但是Hash::check()不起作用。总是返回false。此外Hash::Make()每次都返回不同的字符串。我试过了bcrypt()但是,它也没有用。请帮我。这是我的代码。

public function changePassword(Request $request)
{
    $user = Auth::user();

    $curPassword = $request->input['curPassword'];
    $newPassword = $request->input['newPassword'];

    if (Hash::check($curPassword, $user->password)) {
        $user_id = $user->id;
        $obj_user = User::find($user_id)->first();
        $obj_user->password = Hash::make($newPassword);
        $obj_user->save();

        return response()->json(["result"=>true]);
    }
    else
    {
        return response()->json(["result"=>false]);
    }
}

谢谢。

4 个答案:

答案 0 :(得分:5)

继承人我是怎么做到的:

在我的控制器中,我使用以下方法:

public function changePassword()
{
    $this->validate(request(), [
        'current_password' => 'required|current_password',
        'new_password' => 'required|string|min:6|confirmed',
    ]);

    request()->user()->fill([
        'password' => Hash::make(request()->input('new_password'))
    ])->save();
    request()->session()->flash('success', 'Password changed!');

    return redirect()->route('password.change');
}

这将验证输入,然后正确保存当前用户的新密码。它还会闪烁一条消息,然后将它们返回到密码更改表单。您可以删除该部分并在那里做自己的事情。

这利用了我创建的名为current_password的自定义验证规则。您必须将此添加到AppServiceProvider::boot()方法中,如下所示:

public function boot()
{
    // current password validation rule
    Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) {
        return Hash::check($value, Auth::user()->password);
    });
}

请确保您使用Auth中的HashValidatorAppServiceProvider外墙。

最后,我们只需要在lang/en/validation.php文件中声明我们的错误消息:

'current_password' => "The :attribute is invalid.",

希望这有帮助。

答案 1 :(得分:4)

我认为你的$ curPassword变量是空的,这就是为什么它总是返回false。试试这种方式

$curPassword = $request->curPassword;
$newPassword = $request->newPassword;

除非您在input数组中发送数据。但有些人Hash::check()失败了,这意味着没有匹配。

对于相同的字符串,是的,Hash::make()总是返回不同的字符串。我想出于安全目的。

答案 2 :(得分:1)

应该是

 $curPassword =$request->input('curPassword');
 $newPassword = $request->input('newPassword');

 $curPassword = $request->input['curPassword'];
 $newPassword = $request->input['newPassword'];

在Laravel Documentation中他们说如果要更改密码,那么在检查后你可以做什么

 $request->user()->fill([
            'password' => Hash::make($request->newPassword)
        ])->save();

答案 3 :(得分:0)

此行中也有错误

$obj_user = User::find($user_id)->first();

应该是

$obj_user = User::find($user_id);

正如官方文件所说

// Retrieve a model by its primary key...
$flight = App\Flight::find(1);

// Retrieve the first model matching the query constraints...
$flight = App\Flight::where('active', 1)->first();