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 相关文章推荐
jquery常用技巧及常用方法列表集合
Apr 06 Javascript
ajax的hide隐藏问题解决方法
Dec 11 Javascript
javascript实现删除前弹出确认框
Jun 04 Javascript
JQuery 传送中文乱码问题的简单解决办法
May 24 Javascript
jQuery获取file控件中图片的宽高与大小
Aug 04 Javascript
React props和state属性的具体使用方法
Apr 12 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
Vue实现简单分页器
Dec 29 Javascript
JS实现继承的几种常用方式示例
Jun 22 Javascript
原生js实现无缝轮播图
Jan 11 Javascript
vue element 关闭当前tab 跳转到上一路由操作
Jul 22 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
Nov 16 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
Wordpress php 分页代码
2009/10/21 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
Python常用库推荐
2016/12/04 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
中式餐厅创业计划书范文
2014/01/23 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
教师师德考核自我评价
2014/09/13 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python