在 Laravel 5.1 中发送密码重置 link 后重定向?

Redirect after sending password reset link in Laravel 5.1?

发送密码重置后如何设置重定向路径link?

ResetsPasswords 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'; 添加到您的 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 更改为您希望重定向的位置来自定义路由。

您应该查看 docs 了解更多信息。

正如您在特征代码中看到的那样,成功的结果重定向回同一路由:

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

关键是,通常不需要重定向到另一个路由来告诉用户电子邮件已发送。您可以对相同的视图使用相同的路由,并在视图中创建两个代码块。一个生成用于提交电子邮件地址的表单,另一个生成成功通知。

您不需要编辑供应商文件。只需打开 /app/Http/Controllers/Auth/PasswordController.php 并在 PasswordController class

中添加以下代码行
    protected $redirectPath = '/DesiredUrl';

测试于 Laravel 5.1

您会注意到 ResetsPasswords trait 中有以下两个函数:getSendResetLinkEmailSuccessResponsegetSendResetLinkEmailFailureResponse,它们在发送密码重置电子邮件后处理重定向,具体取决于是否重置邮件发送成功与否。

更改此设置的一个很好的理由是(如我的情况)您希望在发送密码重置 link 后 return 用户进入主登录屏幕。

为此,只需更改 App\Http\Controllers\Auth\PasswordController 并覆盖函数,如下所示:

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

以下内容适合我,将以下内容添加到您的 ForgotPasswordController:

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