我正在关注有关使用Laravel设置身份验证的this教程,我大部分都在那里。
当我发出密码重置请求时,我收到一封电子邮件发送给我,如果我点击电子邮件中的链接,我会看到一个表格,然后我会正确填写并希望重定向回/仪表板,不过这个永远不会发生,而是重定向到/ home。
我无法提供任何代码,因为Laravel在幕后完成了所有工作。任何帮助表示赞赏:)。
这是因为您希望重置密码控制器在成功重置时将您重定向到/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"部分以获取有关此文档的官方文档。
对于Laravel 5.3,您必须在redirectPath
中设置属性PasswordController
,当您使用Laravel的内置函数时,该属性在登录后用于重定向。
应该是这样的:
# PasswordController.php
protected $redirectPath = '/dashboard';
自从Laravel 5.4以来,该物业被重命名为$redirectTo
:
# PasswordController.php
protected $redirectTo = '/dashboard';
如果有人在重定向时需要不同的地址(基于例如用户角色)可以将其添加到ResetPasswordController
public function redirectPath()
{
if (auth()->user()->hasRole(xyz)) {
return route('');
}
return route('');
}
如果您正在使用Spark,则需要在getResetSuccessResponse()
中覆盖/spark/src/Http/Controllers/Auth/PasswordController.php
。
为什么?
因为/spark/src/Http/Controllers/Auth/PasswordController.php
使用具有ResetsPasswords trait
的getResetSuccessResponse()
并且它重定向到来自redirectPath()
的RedirectsUsers trait
,$redirectTo
是Laravel框架的一部分,无法改变。
不知何故,这是忽略/home
属性并将用户发送到$redirectTo
而不是在public function redirectPath()
{
if (property_exists($this, 'redirectPath')) {
return $this->redirectPath;
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
中声明的内容:
$redirectPath
或者也许只是在某处创建$redirectPath
属性。
希望这有助于某人!
在Laravel 5.6中,$redirectTo
不是有效属性。请改用Documentation。
见:redirectTo
更改Http\Controllers\Auth\ResetPasswordController
的字段protected $redirectTo = '/home';
的值:
public function __construct()
{
$this->redirectTo=route('home');
}
如果要使用动态路由,请从构造函数中对该字段进行增值:
qazxswpoi