Смена Пароля В Laravel 5.4
Я добавил код для смены пароля в своем веб-приложении. Но 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 ответов:
Я думаю, что ваша переменная $curPassword пуста, поэтому она всегда возвращает false. Попробуйте этот способ
$curPassword = $request->curPassword; $newPassword = $request->newPassword;Если только вы не отправляете данные в массиве
input. Но кто-то,Hash::check()терпит неудачу, что означает, что нет соответствия.Что касается одной и той же строки, то да,
Hash::make()всегда возвращает другую строку. Наверное, в целях безопасности.
Вот как я это сделал:
В моем контроллере я использую следующий метод:
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,Hash, иValidatorфасады вAppServiceProvider.Наконец, нам просто нужно объявить наше сообщение об ошибке в нашем файле
lang/en/validation.php:'current_password' => "The :attribute is invalid.",Надеюсь, это поможет.
Это должно быть
$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();
Comments