按照重置密码路径

时间:2017-02-27 19:34:41

标签: laravel-5.2

我有一个工作密码重置过程,路由如下:

Route::group(['middleware' => [], 'namespace' => 'Auth'], function () {
    Route::get('/password/reset/{token?}', ['as' => 'site.password.showResetForm', 'uses' => 'PasswordController@showResetForm']);
    Route::post('/password/email', ['as' => 'site.password.sendResetLinkEmail', 'uses' => 'PasswordController@postEmail']);
    Route::post('/password/reset', ['as' => 'site.password.reset', 'uses' => 'PasswordController@reset']);
});

如果某人当前已登录该计算机,则会出现问题。在这种情况下,当用户单击电子邮件中的链接时,将永远不会执行PasswordController @ showResetForm,并且会在新选项卡中打开其主页。有没有办法强制当前用户注销,以便重置密码?

3 个答案:

答案 0 :(得分:3)

我没有创建其他路线,而是覆盖用于将用户路由到 auth.password.reset <的 showResetForm 函数。 / strong>查看,在

中找到
vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php

为此,请在 ResetPasswordController 中添加以下内容:

public function showResetForm(Request $request, $token = null)
{
    $this->guard()->logout();
    $request->session()->flush();
    $request->session()->regenerate();

    return view('auth.passwords.reset')->with(
        ['token' => $token, 'email' => $request->email]
    );
}

一切都很好,应该是你需要添加的唯一代码。

答案 1 :(得分:2)

在您的某个控制器中调用Auth::logout();

如果由于用户登录而永远不会显示showResetForm,则需要创建一个临时页面,您可以在其中调用上述功能,然后重定向到密码重置页面:

public function do_password_reset()
{
    Auth::logout();
    return redirect()->route('PasswordController@showResetForm');
}

(请记住为此功能添加相关路线。)

答案 2 :(得分:1)

至于编辑 Lawrence 建议的 ResetPasswordController ,您可能希望从其构造函数中删除访客中间件:

$this->middleware('guest');

此中间件将经过身份验证的用户重定向到根页面,因此可以防止已登录的用户注销。