簡體   English   中英

在Laravel 5.1中發送密碼重置鏈接后重定向?

[英]Redirect after sending password reset link in Laravel 5.1?

如何在發送密碼重置鏈接后設置重定向路徑?

ResetsPaswords中,trait是這段代碼:

switch ($response) {
    case Password::RESET_LINK_SENT:
       return redirect()->back()->with('status', trans($response));

    case Password::INVALID_USER:
       return redirect()->back()->withErrors(['email' => trans($response)]);
}

但我不想更改供應商文件。 還有另外一種方法嗎?

您可以通過添加protected $redirectTo = '/dashboard';來完成此操作protected $redirectTo = '/dashboard'; 到您的PasswordController

所以你的控制器看起來像這樣:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset requests
    | and uses a simple trait to include this behavior. You're free to
    | explore this trait and override any methods you wish to tweak.
    |
    */

    use ResetsPasswords;

    protected $redirectTo = '/dashboard';

    //The rest of the controller below this...

您可以通過將/dashboard更改為您希望重定向的位置來自定義路徑。

您應該查看文檔以獲取更多信息。

正如您在特征代碼中看到的那樣,成功的結果會重定向回相同的路徑:

redirect()->back()->with('status', trans($response));

請注意with()方法中的status變量。 這將設置一個臨時會話變量,您可以在視圖模板中使用該變量,例如通知用戶電子郵件已成功設置。

@if (session('status'))

// ... notification that the email has been sent

@else

// ... your original form for submitting an email address

@endif

關鍵是,通常沒有必要重定向到另一條路線只是為了告訴用戶電子郵件已被發送。 您可以使用具有相同視圖的相同路徑,並在視圖中創建兩個代碼塊。 生成用於提交電子郵件地址的表單的另一個表單,其生成用於生成成功通知的另一個表單。

您將在ResetsPasswords特征中注意到以下兩個函數: getSendResetLinkEmailSuccessResponsegetSendResetLinkEmailFailureResponse ,它們在發送密碼重置電子郵件后處理重定向,具體取決於重置電子郵件是否已成功發送。

改變這種情況的一個很好的理由是,在發送密碼重置鏈接后,如果(在我的情況下)您希望將用戶返回到主登錄屏幕。

為此,只需更改您的App\\Http\\Controllers\\Auth\\PasswordController並覆蓋該函數,如下所示:

protected function getSendResetLinkEmailSuccessResponse($response)
{
    return redirect()->route('login')->with('status', trans($response));
}

您無需編輯供應商文件。 只需打開/app/Http/Controllers/Auth/PasswordController.php並在PasswordController類中添加以下代碼行

    protected $redirectPath = '/DesiredUrl';

在Laravel 5.1上測試過

以下適用於我,將以下內容添加到您的ForgotPasswordController

protected function sendResetLinkResponse(Request $request, $response)
{
    return redirect()->route('login')->with('status', trans($response));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM