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 相关文章推荐
编写针对IE的JS代码两种编写方法
Jan 30 Javascript
给文字加上着重号的JS代码
Nov 12 Javascript
js获得当前时区夏令时发生和终止的时间代码
Feb 23 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
Aug 01 Javascript
原生Javascript封装的一个AJAX函数分享
Oct 11 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
Mar 24 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
JavaScript中for循环的几种写法与效率总结
Feb 03 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
JS中用EL表达式获取上下文参数值的方法
Mar 28 Javascript
angularjs http与后台交互的实现示例
Dec 21 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
Apr 26 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
PHP中$_SERVER使用说明
2015/07/05 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
php使用正则验证中文
2016/04/06 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
JS传参及动态修改页面布局
2017/04/13 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
javascript实现商品图片放大镜
2019/11/28 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
python相似模块用例
2016/03/04 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
弘扬民族精神演讲稿
2014/05/07 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
管理失职检讨书范文
2015/05/05 职场文书
公司员工手册范本
2015/05/14 职场文书
感动中国何玥观后感
2015/06/02 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL