簡體   English   中英

在Laravel 5.4中更改密碼

[英]Change Password In 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]);
    }
}

謝謝。

繼承人我是怎么做到的:

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

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);
    });
}

只需確保您在AppServiceProvider使用AuthHashValidator外觀。

最后,我們只需要在lang/en/validation.php文件中聲明我們的錯誤消息:

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

希望這可以幫助。

我認為你的$ curPassword變量是空的,這就是為什么它總是返回false。 試試這種方式

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

除非您在input數組中發送數據。 但是somewhoe, Hash::check()失敗了,這意味着沒有匹配。

至於相同的字符串,是的, Hash::make()總是返回一個不同的字符串。 我想出於安全目的。

它應該是

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

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

在Laravel 文檔中,他們說如果你想更改密碼,那么在檢查之后你可以做什么

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

這一行也有錯誤

$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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM