我正在关注使用Laravel设置身份验证的this教程,除了一点之外我大部分都在那里。
当我发出密码重置请求时,我收到了一封发给我的电子邮件,如果我点击电子邮件中的链接,我会看到一个表格,然后我会正确填写并希望重定向回/仪表板,但这永远不会发生,而是重定向到/ home。
我无法提供任何代码,因为一切都是由Laravel在幕后完成的。任何帮助表示赞赏:)。
答案 0 :(得分:8)
这是因为您希望重置密码控制器在成功重置时将您重定向到/dashboard
。也许我错了,但我无法在代码中的任何地方看到指定的内容(正如您所说,基于新的Laravel安装)。
为了证明这一点,请按照以下代码进行操作:
默认情况下,在新的Laravel安装中,PasswordController
目录中会显示app/Http/Controllers/Auth/
。在line 21 of that file上,它包含' ResetsPasswords
特征。所以,让我们来看看这个特质。
正如您所看到的,在postReset
方法(这是重置最终实际密码的方法)中,line 95上的重定向位置推迟到redirectPath
,如您所见,在line 131上,如果控制器上不存在/home
或redirectPath
属性,则代码会专门将用户转发到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');
}