[英]Laravel - Redirect user to previous page after successful login
我试图在成功登录后将用户重定向回上一页。 为此,在LoginController.php
我添加了一个redirectTo()
函数,如下所示:
protected function redirectTo()
{
return url()->previous();
}
有了这个,我尝试登录,但成功登录后,我被重定向到主页。( /
)。
当我在redirectTo()
函数中执行dd(url()->previous())
时,我发现之前的 URL 是http://localhost/login
。 所以用户被重定向到login
页面,然后重定向到home
。
我还尝试在redirectTo()
函数中return redirect()->back()
但出现以下错误
标头不能包含多个标头,检测到新行
我还尝试在LoginController
使用authenticate()
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password])) {
// Authentication passed...
return redirect()->back();
}
}
它重定向到/home
(未找到)
使用return redirect()->intended()
而不是return redirect()->back()
给出相同的结果。
我如何将用户重定向到他/她访问登录页面时所在的上一个页面?
我仍然希望保留默认功能,即当用户尝试使用auth
Middlewate 访问路由时,他会被带到登录页面,并在成功登录后重定向到他打算首先访问的页面。
Redirect::back()
back()
redirect()->back()
redirect()->previous()
是相同的,它们会让您进入上一页。 您可以做的是发送一个返回 url 作为参数或将其放入会话中,当您的身份验证完成后,重定向到该 url。
redirect()->to($request->input('returnUrl'))
对于重定向到 home,它被硬编码在“App\\Http\\Middleware\\RedirectIfAuthenticated.php”中
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
您还应该阅读 PHP 中的 trait。
我按以下方式工作:
在登录控制器中
public function redirectTo(){
if (request()->has('previous')) {
$this->redirectTo = request()->get('previous');
}
return $this->redirectTo ?? '/defaultPath';
}
方法request()->has('previous')
验证会话中是否存在以前的路径,如果不存在则重定向到默认路径。
您可以通过使用全局后台助手函数来实现。
return back()->withInput();
只需添加到 LoginController
public function redirectTo(){
if (request()->has('previous')) {
$this->redirectTo = request()->get('previous');
}
return $this->redirectTo ?? '/defaultPath';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.