Percorso Laravel con variabile nell'URL
-
21-12-2019 - |
Domanda
Sto cercando di implementare la logica di reimpostazione della password.L'utente riceve il collegamento per reimpostare la password nell'e-mail.L'URL sembra
http://example.com/reset/resetcode
Ho il percorso definito per questo:
Route::get('reset/{resetcode}', function(){
return View::make('users.reset_password');
});
Il modulo viene visualizzato in vista dell'invio del file email, new password
eccetera.Per il post del modulo ho il percorso definito come:
Route::post('reset/{resetcode}', array( 'as' => 'reset', 'uses' => 'UserController@passwordReset'));
Prendo il resetcode
da post route
dentro il passwordReset
controllore qui sotto
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.');
}
Il problema che sto riscontrando è quando lo faccio Redirect::route
dopo che la convalida fallisce. Sto ottenendo il resetcode
dal percorso definito per post
.Quando la convalida fallisce, il percorso di reindirizzamento si incasina e non riesco a ottenere il file resetcode
la seconda volta.Il presunto URL del formato
http://example.com/reset/8f1Z7wA4uVt7VemBpGSfaoI9mcjdEwtK8elCnQOb
diventa
http://bcnet.org/reset/%7Bcode%7D
Ha a che fare con /{resetcode}
parte del percorso e questo è variabile, quindi come posso ottenere il valore corretto resetcode
anche dopo che la convalida fallisce, il che significa che l'URL rimane intatto.O come posso risolverlo nel modo appropriato Redirect::route
dopo il fallimento della validazione.
Soluzione
È necessario includere il $resetcode
al tuo ritorno
else return Redirect::route('reset', $resetcode)->withInput()
->withErrors($validation)