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 相关文章推荐
学习YUI.Ext基础第一天
Mar 10 Javascript
基于jquery的3d效果实现代码
Mar 23 Javascript
多个js与css文件的合并方法详细说明
Dec 26 Javascript
Javascript全局变量var与不var的区别深入解析
Dec 09 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
May 03 Javascript
JQuery中的html()、text()、val()区别示例介绍
Sep 01 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
Aug 23 Javascript
Node.JS中事件轮询(Event Loop)的解析
Feb 25 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 Javascript
vuex与组件联合使用的方法
May 10 Javascript
vue 路由守卫(导航守卫)及其具体使用
Feb 25 Javascript
js前端设计模式优化50%表单校验代码示例
Jun 21 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
php set_time_limit()函数的使用详解
2013/06/05 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
php读取csc文件并输出
2015/05/21 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
django 将model转换为字典的方法示例
2018/10/16 Python
python仿抖音表白神器
2019/04/08 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
python实现连连看游戏
2020/02/14 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
食堂员工工作职责
2013/12/18 职场文书
白酒业务员岗位职责
2013/12/27 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
任命书格式范文
2015/09/22 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers