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数学函数Exp使用说明
Aug 09 Javascript
动态加载js的方法汇总
Feb 13 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
Aug 01 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
Dec 25 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
Jul 07 Javascript
老生常谈JavaScript 函数表达式
Sep 01 Javascript
Javascript中click与blur事件的顺序详析
Apr 25 Javascript
Js面试算法详解
Apr 08 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
js实现百度淘宝搜索功能
Feb 17 Javascript
js实现简易ATM功能
Oct 27 Javascript
element-ui封装一个Table模板组件的示例
Jan 04 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 smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
详解webpack进阶之插件篇
2017/07/06 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
Python采用Django开发自己的博客系统
2020/09/29 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
python对execl 处理操作代码
2020/06/22 Python
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
期末学生评语大全
2014/04/24 职场文书
工会换届选举方案
2014/05/21 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
唐山大地震观后感
2015/06/05 职场文书
学校食堂管理制度
2015/08/04 职场文书
初中政教处工作总结
2015/08/12 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
Python数据处理的三个实用技巧分享
2022/04/01 Python