Маршрут Laravel с переменной в URL
-
21-12-2019 - |
Вопрос
Я пытаюсь реализовать логику сброса пароля.Пользователь получает ссылку для сброса пароля в электронном письме.URL-адрес выглядит как
http://example.com/reset/resetcode
У меня для него определен маршрут:
Route::get('reset/{resetcode}', function(){
return View::make('users.reset_password');
});
Форма отображается в представлении для отправки email, new password
и т. д.Для сообщения формы у меня есть маршрут, определенный как:
Route::post('reset/{resetcode}', array( 'as' => 'reset', 'uses' => 'UserController@passwordReset'));
я хватаю resetcode
от post route
внутри passwordReset
контроллер ниже
public function passwordReset($resetcode)
{
$validation = Validator::make(Input::all(), UserModel::$rulesPasswordReset);
if ($validation->passes())
{
try
{
// Find the user using the user email address
$user = Sentry::findUserByLogin(Input::get('email'));
// Check if the reset password code is valid
if ($user->checkResetPasswordCode($resetcode))
{
// Attempt to reset the user password
if ($user->attemptResetPassword($resetcode, 'new_password'))
{
// Password reset passed
}
else
{
// Password reset failed
}
}
else
{
// The provided password reset code is Invalid
}
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
echo 'User was not found.';
}
}
else return Redirect::route('reset')->withInput()
->withErrors($validation)
->with('title', 'resetrequestfailure')
->with('message', 'Seems like you made some errors.');
}
Проблема, с которой я сталкиваюсь, заключается в том, что когда я это делаю Redirect::route
после неудачной проверки. я получаю resetcode
от маршрута, определенного для post
.Если проверка не удалась, маршрут перенаправления сбивается, и я не могу получить resetcode
второй раз.Предполагаемый URL формата
http://example.com/reset/8f1Z7wA4uVt7VemBpGSfaoI9mcjdEwtK8elCnQOb
становится
http://bcnet.org/reset/%7Bcode%7D
Это связано с /{resetcode}
часть маршрута, и это переменная, так как я могу получить правильный resetcode
даже после неудачной проверки это означает, что URL-адрес остается нетронутым.Или как я могу исправить это в соответствующем Redirect::route
после неудачной проверки.
Решение
Вам необходимо включить $resetcode
по твоему возвращению
else return Redirect::route('reset', $resetcode)->withInput()
->withErrors($validation)