Laravel - 登录成功后将用户重定向到上一页
Laravel - 登录成功后将用户重定向到上一页
我正在尝试在成功登录后将用户重定向回上一页。为此,在LoginController.php
中,我添加了一个redirectTo()
函数如下:
protected function redirectTo() { return url()->previous(); }
这样做后,我尝试登录,但在成功登录后,我被重定向到主页(/
)。
当我在redirectTo()
函数中执行dd(url()->previous())
时,我发现上一页的URL是http://localhost/login
。所以用户被重定向到login
页面,然后再重定向到home
页面。
我还尝试在redirectTo()
函数中使用return redirect()->back()
,但是我收到以下错误消息:
Header may not contain more than a single header, new line detected
我还尝试在LoginController
中使用authenticate()
:
public function authenticate() { if (Auth::attempt(['email' => $email, 'password' => $password])) { // Authentication passed... return redirect()->back(); } }
它重定向到/home
(找不到该页面)。
在return redirect()->back()
之后使用return redirect()->intended()
会得到相同的结果。
我如何将用户重定向到他/她在访问登录页面时所在的上一页?
我仍然希望保留默认功能,即当用户尝试访问具有auth
中间件的路由时,他将被带到登录页面,成功登录后,重定向到他最初打算去的页面。
Laravel - 登录成功后将用户重定向到上一页的问题出现的原因是没有直接的方法可以将用户重定向到上一页。解决方法是可以通过发送返回URL作为参数或将其放入会话中,在身份验证完成后重定向到该URL。另外,可以在"App\Http\Middleware\RedirectIfAuthenticated.php"文件中找到将用户重定向到主页的代码。此外,还建议了解PHP中的trait相关知识。以下是整理后的文章:
Laravel - 登录成功后将用户重定向到上一页的问题
在Laravel中,如果我们想要在用户成功登录后将其重定向到上一页,可能会遇到一些困难。在Laravel中,有几种使用相同效果的方法可以将用户重定向到上一页,它们分别是Redirect::back()
、back()
、redirect()->back()
和redirect()->previous()
。这些方法都可以将用户重定向到上一页。
然而,如果我们想要在身份验证完成后将用户重定向到指定的URL,该怎么办呢?解决方法是可以通过将返回URL作为参数发送或将其放入会话中。在身份验证完成后,我们可以使用redirect()->to($request->input('returnUrl'))
方法将用户重定向到指定的URL。
另外,在"App\Http\Middleware\RedirectIfAuthenticated.php"文件中,我们可以找到将用户重定向到主页的代码。该代码如下:
public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { return redirect('/home'); } return $next($request); }
这段代码表示,如果用户已经通过身份验证,则将其重定向到主页('/home')。
最后,我们还建议了解PHP中的trait相关知识,以便更好地理解和应用Laravel中的功能。
通过上述方法,我们可以在Laravel中解决将用户重定向到上一页的问题。
问题的出现原因是在Laravel中,用户成功登录后,希望将用户重定向到先前的页面。然而,没有提供直接的方法来实现这一点。
解决方法是使用全局的back辅助函数。这个函数可以将用户重定向到之前的页面,并将用户输入的数据一起返回。
具体的解决方法是在登录控制器的登录方法中添加以下代码:
return back()->withInput();
这样,当用户成功登录后,将会自动重定向到之前的页面,并且之前输入的数据也会被保留。
需要注意的是,back()函数将会返回到之前的页面,即登录页面。在该页面上,用户可以选择使用Google账号登录。
通过以上方法,我们可以轻松地实现在Laravel中登录后重定向到先前页面的功能。
问题的出现原因:在登录成功后,希望将用户重定向到之前访问的页面。但是,由于没有保存之前访问页面的信息,所以无法实现这个功能。
解决方法:
在LoginController中添加以下代码:
public function redirectTo(){ if (request()->has('previous')) { $this->redirectTo = request()->get('previous'); } return $this->redirectTo ?? '/defaultPath'; }
这段代码的作用是检查session中是否存在之前访问的路径。如果存在,则将重定向路径设置为之前访问的路径;如果不存在,则将重定向路径设置为默认路径('/defaultPath')。这样,在登录成功后,用户将被重定向到之前访问的页面。