2017-02-27 24 views
0

我有以下途徑工作密碼重置過程:如果某人目前已經登錄的機器上如何強制註銷以下重置密碼路徑時

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

我的問題就出現了。在這種情況下,當用戶點擊電子郵件中的鏈接時,PasswordController @ showResetForm永遠不會執行,並且他們的主頁將在新選項卡中打開。有沒有辦法強制當前用戶註銷,以便密碼重置可以繼續?

回答

0

在其中一個控制器中調用Auth::logout();

如果showResetForm從不顯示,由於用戶正在登錄,您將需要創建在您調用上面的函數,然後重定向到的密碼重置頁的臨時頁面:

public function do_password_reset() 
{ 
    Auth::logout(); 
    return redirect()->route('[email protected]'); 
} 

(記得要加用於該功能的相關路徑。)

2

而不是創建附加路由我改寫用於路由用戶將AUTH的showResetForm功能.password.reset認爲,

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] 
    ); 
} 

一切順利的話,應該是你需要的唯一代碼加上。

+0

我接受了接受的答案,但更喜歡這種方法。謝謝 – WombatPM

1

至於編輯ResetPasswordController通過勞倫斯建議,您可能希望從它的構造函數刪除來賓中間件:

$this->middleware('guest'); 

這個中間件重定向認證用途根頁,所以它會防止已經從註銷登錄用戶。