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

时间:2015-09-27 20:38:43

标签: php authentication redirect 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)]);
}

但我不想更改供应商文件。还有另一种方式吗?

5 个答案:

答案 0 :(得分:12)

您可以将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以获取更多信息。

答案 1 :(得分:2)

正如您在特质代码中看到的那样,成功的结果会重定向回相同的路线:

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

请注意status方法中的with()变量。这会设置一个临时会话变量,您可以在视图模板中使用该变量,例如通知用户电子邮件已成功设置。

@if (session('status'))

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

@else

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

@endif

关键是,通常没有必要重定向到另一条路线只是为了告诉用户电子邮件已被发送。您可以使用具有相同视图的相同路径,并在视图中创建两个代码块。一个生成提交电子邮件地址的表单,另一个生成成功通知。

答案 2 :(得分:1)

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

改变这种情况的一个很好的理由是,如果(在我的情况下)你想在发送密码重置链接后将用户返回到主登录屏幕。

要执行此操作,只需更改App\Http\Controllers\Auth\PasswordController并覆盖该功能,如下所示:

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

答案 3 :(得分:0)

您不需要编辑供应商文件。只需打开/app/Http/Controllers/Auth/PasswordController.php并在PasswordController类中添加以下代码行

    protected $redirectPath = '/DesiredUrl';

在Laravel 5.1上测试

答案 4 :(得分:0)

以下内容对我有用,请将以下内容添加到您的ForgotPasswordController

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