在Laravel 5中更改密码重置重定向链接

时间:2015-10-27 12:10:47

标签: php laravel redirect passwords

我正在关注使用Laravel设置身份验证的this教程,除了一点之外我大部分都在那里。

当我发出密码重置请求时,我收到了一封发给我的电子邮件,如果我点击电子邮件中的链接,我会看到一个表格,然后我会正确填写并希望重定向回/仪表板,但这永远不会发生,而是重定向到/ home。

我无法提供任何代码,因为一切都是由Laravel在幕后完成的。任何帮助表示赞赏:)。

6 个答案:

答案 0 :(得分:8)

这是因为您希望重置密码控制器在成功重置时将您重定向到/dashboard。也许我错了,但我无法在代码中的任何地方看到指定的内容(正如您所说,基于新的Laravel安装)。

为了证明这一点,请按照以下代码进行操作:

默认情况下,在新的Laravel安装中,PasswordController目录中会显示app/Http/Controllers/Auth/。在line 21 of that file上,它包含' ResetsPasswords特征。所以,让我们来看看这个特质。

正如您所看到的,在postReset方法(这是重置最终实际密码的方法)中,line 95上的重定向位置推迟到redirectPath ,如您所见,在line 131上,如果控制器上不存在/homeredirectPath属性,则代码会专门将用户转发到redirectTo

因此,要手动设置重定向位置,只需在protected $redirectPath = '/dashboard';课程中设置Http\Controllers\Auth\PasswordController

但是,在您关联的网页上,请参阅"After resetting passwords"部分,了解相关的官方文档。

答案 1 :(得分:7)

当您使用Laravel的内置函数时,必须在登录后用于重定向的redirectPath中设置属性PasswordController

应该是这样的:

# PasswordController.php

protected $redirectPath = '/dashboard';

答案 2 :(得分:1)

如果有人在重定向时需要不同的地址(基于例如用户角色)可以将其添加到ResetPasswordController

public function redirectPath()
    {
        if (auth()->user()->hasRole(xyz)) {
            return route('');
        }

        return route('');
    }

答案 3 :(得分:1)

如果您使用的是Spark,则需要覆盖getResetSuccessResponse()中的/spark/src/Http/Controllers/Auth/PasswordController.php

为什么?

因为/spark/src/Http/Controllers/Auth/PasswordController.php使用了具有ResetsPasswords trait的{​​{1}},并且重定向到了getResetSuccessResponse()的{​​{1}},而redirectPath()是Laravel框架的一部分不能更改。

以某种方式这会忽略RedirectsUsers trait属性并将用户发送到$redirectTo而不是/home中声明的内容:

$redirectTo

或者只是在某个地方创建public function redirectPath() { if (property_exists($this, 'redirectPath')) { return $this->redirectPath; } return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home'; } 属性。

希望这对某人有帮助!

答案 4 :(得分:0)

在Laravel 5.6中,$redirectPath不是有效的属性。请改用$redirectTo

请参阅:Documentation

答案 5 :(得分:0)

更改redirectTo的字段Http\Controllers\Auth\ResetPasswordController的值:

protected $redirectTo = '/home';

如果要使用动态路由,请从构造函数中评估该字段的值:

public function __construct()
{
    $this->redirectTo=route('home');
}