Сброс пароля в Laravel 5 не работает

Я работаю над интернет-порталом электронной коммерции laravel 5.

У меня возникла проблема, когда пользователь обновляет пароль, используя готовые сценарии.

Проблема в том, что я могу отправить ссылку клиенту совершенно без проблем, и клиент также может изменить свой пароль. Но при выходе и повторном входе я получаю сообщение об ошибке как Invalid credentials,

В моем rout.php у меня есть это:

Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);

Это страница входа в систему:

<form class="form-horizontal" role="form" method="POST" action="{{ url('/login') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">

<div class="form-group">
<label class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input type="email" class="form-control" name="email" value="{{ old('email') }}">
</div>
</div>

<div class="form-group">
<label class="col-md-4 control-label">Password</label>
<div class="col-md-6">
<input type="password" class="form-control" name="password">
</div>
</div>

<div class="form-group">
<div class="col-md-4"></div>
<div class="col-md-4">
<a href="{{url('/password/email')}}">Forgot Password</a>
</div>
</div>

<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary btn-block">Login</button>
</div>
</div>
</form>

Я не могу войти снова после того, как я вышел из системы после сброса пароля.

РЕДАКТИРОВАТЬ 1:

Когда кнопка входа в систему нажата на странице формы входа, postLogin метод называется. Вот код

public function postLogin( Request $request ) {
$this->validate( $request, [
'email'     => ['required', 'exists:users,email,role,customer'],
'password'  => 'required'
]);

$credentials = $request->only('email', 'password');

if ( \Auth::attempt($credentials) ) {
\Session::flash('logged_in', 'You have successfully logged in.');
return redirect('/');
}

return redirect('/login')->withInput($request->all())->withErrors(['email' => 'Invalid Email Address Or Password']);
}

РЕДАКТИРОВАТЬ 2:

Я просто понимаю, что логин не проверяет хэш и, следовательно, возвращает false, делая dd(\Hash::check($request->password, $user->password)), после обновления пароля и повторного входа в систему. В чем может быть проблема с этим?

Где я ошибся? Пожалуйста, ведите меня.

Заранее спасибо.

ПостскриптумЯ использую значения по умолчанию только для обновления пароля, остальное все, я сделал контроллеры и модели, которые все работают нормально, без каких-либо проблем.

1

Решение

Если новый пароль не работает после изменения, то при смене пароля что-то идет не так.

Скорее всего подозрительным является шифрование. Вполне возможно, что вы не используете Hash :: make ($ password) и сохраняете его в текстовом формате.

Вы можете дважды проверить, правильно ли сохранен хеш в БД с помощью функции Hash :: check ($ password, $ hash);

Во время входа в систему вы можете проверить пароль как

public function postLogin( Request $request ) {
$user=User::where('email', $request->email);
Log::debug("Testing $request->password $user->password ". Hash::check($request->password, $user->password));
}

Если проверка Hash :: false, то при сохранении нового пароля что-то пошло не так. $ user-> пароль должен быть в хешированном виде.

0

Другие решения

Я тоже наткнулся на это и нашел ответ Вот, просто добавив это для дальнейшего использования ..

Причина в том, что, как только вы добавите setPasswordAttribute метод на вашем User В этой модели пароль хешируется дважды при использовании встроенной функции сброса пароля Laravel. Как объяснено на странице Laracast, все, что ему нужно, это проверка уже хешированного пароля, например:

// Add Hash facade
use Illuminate\Support\Facades\Hash;

class User extends Authenticatable
{

// ...

/**
* Automatically hash password
*
* @param String $value The password, maybe hashed already
*
* @return string|null
*/
public function setPasswordAttribute($value)
{
if ($value) {
$this->attributes['password'] = Hash::needsRehash($value) ? Hash::make($value) : $value;
}
}
}
0

По вопросам рекламы [email protected]