我正在尝试实现密码重置逻辑。用户在电子邮件中获取重置密码的链接。网址看起来像

http://example.com/reset/resetcode

我已经为其定义了路线:

Route::get('reset/{resetcode}', function(){
    return View::make('users.reset_password');
});

表单在视图中呈现以提交 email, new password ETC。对于表单的帖子,我将路线定义为:

Route::post('reset/{resetcode}', array( 'as' => 'reset', 'uses' => 'UserController@passwordReset'));

我抓住了 resetcodepost 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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top