laravel - Vue前端单页项目的用户认证思路
滿天的星座
滿天的星座 2017-05-16 16:47:44
[PHP讨论组]

环境:

  • Backend:Laravel + Passport

  • Frontend:Vue 2.0 + Vuex + Vue-router

问题:

前端登陆后获取access_token,保存在localStorage中,那么用户退出登录的话需要怎么操作?清空localStorage吗?是否需要向后端再发送请求?

如果用户没有点击退出登录,而是直接关闭浏览器或者窗口呢,下次访问时,localStorage里的access_token依然存在,这样的话安全性不太好吧?

我的access_token的有效期是一年,那么每次登录都会重新生成,这个怎么解决?

求前端用户认证的处理思路……万分感谢!!!

滿天的星座
滿天的星座

全部回复(4)
PHPz

退出时删除localStorage中的access_token
可以给Vuex写个插件,每次commit mutation时,更新一下access_token的刷新时间。
下次登录时,判断这个刷新时间,5分钟前了,就认为登录信息过期了。

如果不想把access_token放到localStorage中,可以放在Vuex中,每次都需要重新登录。
重新登录时,你可以没必要都重新生成access_token吧。

天蓬老师

刚好总结了一个项目,欢迎star~
【vue+axios】一个项目学会前端实现登录拦截

黄舟

认证信息以后台为准,不管是登录还是退出都要发送请求,然后根据api返回的结果前端进行操作,如果不记住认证信息用sesionStorage好点

大家讲道理

设置路由的拦截器,拦截除了login和logout的所有页面,检查本地变量user是否存在,存在则判断上次校验时间,如果超出1分钟则重新校验。

router.beforeEach((to, from, next) => {
  // to 和 from 都是 路由信息对象
  //var auth = to.matched[0].default.auth;
  //console.log(to);
  if (to.path =="/login" || to.path =="/logout") {
    next();
  }
  else {
    const user = store.state.system.user;
    if(user){
      const time = new Date().getTime();
      if(time-user.lastCheckTime > 60*1000){ // 如果上次检查时间大于1分钟,则调用服务端接口判断session 是否依然有效
        store.dispatch("checkLogin",(error,isLogined)=>{ // 异步检查是否状态有效
          if(error || !isLogined){
            console.warn("登录超时");
            next({'path':'/login',query:{backUrl:to.fullPath}});
          }
          else{
            next();
          }
        });
      }
      else{
        next();
      }

    }
    else{
      console.warn("需要登录");
      next({'path':'/login',query:{backUrl:to.fullPath}});
    }
  }
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号