Vue登录注册并保持登录状态的方法


Posted in Javascript onAugust 17, 2018

关于vue登录注册,并保持登录状态,是vue玩家必经之路,网上也有很多的解决方法,但是有一些太过于复杂,新手可能会看的一脸懵逼,现在给大家介绍一种我自己写项目在用而且并不难理解的一种方法。

项目中有一些路由是需要登录才可以进入的,比如首页,个人中心等等

有一些路由是不需要登录就可以进入,比如登录页,注册页,忘记密码等等

那如何判断路由是否需要登录呢?就要在路由JS里面做文章

在router.js中添加meta区分

比如登录注册页面,不需要登录即可进入,那么我们把meta中的isLogin标志设置为false

{
 //登录
 path: '/login',
 component: login,
 meta: {
  isLogin: false
 }
},
{
 //注册
 path: '/register',
 component: register,
 meta: {
  isLogin: false
 }
},

而在首页我们需要登录才能进入,那么我们把meta中的isLogin标志设置为true

{
 //首页
 path: '/home',
 component: home,
 meta: {
  isLogin: true
 },
}

这样我们就为进入各个路由是否需要登录做了区分。

接下来我们在login.vue中修改登录后状态

我们使用axios向后台发起登录请求

this.$axios.post("/xxx/login", {user:name,password:pwd})
  .then(data => {
    //登录失败,先不讨论
    if (data.data.status != 200) {
     //iViewUi的友好提示
     this.$Message.error(data.data.message);
    //登录成功
    } else {
     //设置Vuex登录标志为true,默认userLogin为false
     this.$store.dispatch("userLogin", true);
     //Vuex在用户刷新的时候userLogin会回到默认值false,所以我们需要用到HTML5储存
     //我们设置一个名为Flag,值为isLogin的字段,作用是如果Flag有值且为isLogin的时候,证明用户已经登录了。
     localStorage.setItem("Flag", "isLogin");
     //iViewUi的友好提示
     this.$Message.success(data.data.message);
     //登录成功后跳转到指定页面
     this.$router.push("/home");
    }
 });

Vuex里面我是这样写的(如果项目不需要Vuex,那么直接使用HTML5储存就可以了):

export const store = new Vuex.Store({
 // 设置属性
 state: {
  isLogin: false,
 },

 // 获取属性的状态
 getters: {
  //获取登录状态
  isLogin: state => state.isLogin,
 },

 // 设置属性状态
 mutations: {
  //保存登录状态
  userStatus(state, flag) {
   state.isLogin = flag
  },
 },

 // 应用mutations
 actions: {
  //获取登录状态
  setUser({commit}, flag) {
   commit("userStatus", flag)
  },
 }
})

重点来了~,在mian.js里

router.beforeEach((to, from, next) => {

 //获取用户登录成功后储存的登录标志
 let getFlag = localStorage.getItem("Flag");

 //如果登录标志存在且为isLogin,即用户已登录
 if(getFlag === "isLogin"){

  //设置vuex登录状态为已登录
  store.state.isLogin = true
  next()

  //如果已登录,还想想进入登录注册界面,则定向回首页
  if (!to.meta.isLogin) {
    //iViewUi友好提示
   iView.Message.error('请先退出登录')
   next({
    path: '/home'
   })
  }
 
 //如果登录标志不存在,即未登录
 }else{

  //用户想进入需要登录的页面,则定向回登录界面
  if(to.meta.isLogin){
   next({
    path: '/login',
   })
   //iViewUi友好提示
   iView.Message.info('请先登录')
  //用户进入无需登录的界面,则跳转继续
  }else{
   next()
  }

 }

});

router.afterEach(route => {
 window.scroll(0, 0);
});

这样就已经完成了Vue的登录注册,当用户关闭浏览器或者第二天再次进入网站,用户依旧可以保持着登录的状态直到用户手动退出登录。

Tips:用户退出只需要localStorage.removeItem("Flag")即可

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js转义字符介绍
Nov 05 Javascript
angularjs学习笔记之完整的项目结构
Sep 26 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
Oct 14 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
Dec 21 Javascript
jQuery布局组件EasyUI Layout使用方法详解
Feb 28 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
Vue2.x中的父组件传递数据至子组件的方法
May 01 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
May 21 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
Jul 19 Javascript
微信小程序图片右边加两行文字的代码
Apr 23 Javascript
原生JS实现记忆翻牌游戏
Jul 31 Javascript
小程序清理本地缓存的方法
Aug 17 #Javascript
layui table设置前台过滤转义等方法
Aug 17 #Javascript
详解小程序缓存插件(mrc)
Aug 17 #Javascript
layui 设置table 行的高度方法
Aug 17 #Javascript
微信小程序数据分析之自定义分析的实现
Aug 17 #Javascript
jQuery实现的页面弹幕效果【测试可用】
Aug 17 #jQuery
layui的table中显示图片方法
Aug 17 #Javascript
You might like
动易数据转成dedecms的php程序
2007/04/07 PHP
php xml实例 留言本
2009/03/20 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
Python中模块string.py详解
2017/03/12 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python和c语言哪个更适合初学者
2020/06/22 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
西班牙手机之家:Phone House
2018/10/18 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
公司经理任命书
2014/06/05 职场文书
五一促销活动总结
2014/07/01 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
前台文员岗位职责
2015/02/04 职场文书
机器人瓦力观后感
2015/06/12 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS