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

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

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

3.laravel中的具体实现

  • 路由中间件(判断登陆状态)
    这里以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);



注:本文只贴出了实现重新登录的相关代码,实际代码请按照实际业务做对应修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值