Laravel5.4从新登录跳转到登录前页面的原理和实现

1.应用场景:
用户登录后一段时间须要从新登陆,且登录后返回以前浏览的页面,而不是系统首页。例如:当用户在/article/2 页面,登录过时后跳转到登录页面,登录后用户还应在/user/2而不是home/index。前端

2.实现原理
经过判断cookie过时时间决定用户是否须要从新登录,需从新登录前,存储用户当前的url地址到session中,下次登录后跳转到此url地址。laravel

3.laravel中的具体实现ajax

  • 路由中间件(判断登录状态)
    这里以cookie是否过时判断用户登录状态,中间件只判断登录相关判断和执行,不作多余操做(登陆时我使用cookie的值$token做为session的键存储),代码以下:
public function handle($request, Closure $next) {
    //判断cookie是否存在
    if ($token = Cookie::get('token')) {
        //判断session信息,保持状态一致
        if ($request->session()->get($token)) {
            return $next($request);
        }
    }

    //获取当前url,跳转到登录页
    //这里也能够不用session,直接写到url地址里,须要url_encode()
    return redirect('/admin')->with('reurl', $request->getRequestUri());
  • 页面端(判断闪存信息)
    判断闪存的信息,这里分ajax和submit登录,submit应该不多了,ajax下获取reurl,而后后端登录判断reurl。
@if (session('reurl'))
                <input type="hidden" name="reurl" value="{{ session('reurl') }}"/>
   @endif
  • 登录(登录逻辑)
    省略了判断用户帐户密码,和存储cookie,session的逻辑,最后前端获取url,location.href = 'url',跳转到原url地址。
$reurl = $request->get('reurl');

$url = empty($reurl) ? '/home/index' : $reurl;

return response($url);

注:本文只贴出了实现从新登陆的相关代码,实际代码请按照实际业务作对应修改。后端

相关文章
相关标签/搜索