假设用户正在查看页面的某些部分而他没有登录。他通过页面中给出的链接登录。如何将用户重定向到他正在阅读的特定部分。
注意:我已将用户重定向到初始页面,但仍无法重定向到特定部分。
使用intended()
方法:
return redirect()->intended();
此方法从会话中读取url.intended
值,如果存在,则该方法将用户重定向到此URL。如果没有,默认情况下会将用户重定向到/
要使其与部分一起使用,请使用JS获取完整的URL:
window.location.href
然后,您可以进行AJAX调用以手动将当前URL保存到会话中:
session(['url.intended' => url()->full()])
或者您可以将其放入隐藏的输入中,然后在LoginController
中从请求中获取它并将其保存到会话中。
我这样做的方式:
在App\Http\Middleware\Authenticate.php
我更新句柄功能,如下所示:
public function handle($request, Closure $next)
{
if ($this->auth->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect('login')->with(['lastUrl' => $request->url()]);
}
}
return $next($request);
}
重要的是return redirect('login')->with(['lastUrl' => $request->url()]);
。这样我就可以在登录前获得用户试图访问的目标网址,因此当我登录时,我只是将用户重定向到他试图访问的网址。
如果用户没有尝试访问任何页面,他只是被重定向到默认的欢迎页面。