繁体   English   中英

Laravel - 成功登录后将用户重定向到上一页

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM