nuxt.js中间件实现拦截权限判断的方法


Posted in Javascript onNovember 21, 2018

最近在把vue的项目改成基于nuxt.js是 ssr渲染,需要进行权限拦截判断,网上查了不少资料。最终看官方手册解决了,贴一下过程

项目环境

"element-ui":"^2.3.4",

"flyio":"^0.5.2",

"js-cookie":"^2.2.0",

"nuxt":"^1.4.0",

一:首先登录页面

在登录页面script中引入

import Cookie from 'js-cookie' //npm install js-cookie --save

在script里加上

data(){
 return{
  redirectURL:'/'
 }
},
mounted() {
  let rediretUrl = this.$route.query.ref;
  if (rediretUrl){
  this.redirectURL = rediretUrl
  }
 }

接着在methods里面编写一个 submitLogin的方法

submitLogin(ev) {
  var _this = this;
  this.$refs.ruleForm2.validate((valid) => {
   if (valid) {
   _this.logining = true
   var sendData = {
    username: _this.ruleForm2.account,
    password: _this.ruleForm2.pass,
    is_remember: _this.isRemember
   };
   //登录操作
   _this.$https.post('login/index', sendData).then(res => {
    if (res.status == 1) {
    //将服务端的token存入cookie当中
    Cookie.set('token', res.data.token)
    //返回上一页
    _this.$router.push(_this.redirectURL)
    }else{
    _this.$message.warning(res.msg)
    }
   })
   } else {
   return false;
   }
  });
  },

二:nuxt中间件middleware编写权限拦截

新建一个userAuth.js,目录结构如下

代码如下

import utils from '~/utils/utils'
 
export default function ({route, req, res, redirect}) {
 let isClient = process.client;
 let isServer = process.server;
 let redirectURL = '/login';
 var token, path
 //在服务端
 if (isServer) {
 let cookies = utils.getcookiesInServer(req)
 path = req.originalUrl;
 token = cookies.token ? cookies.token : ''
 }
 //在客户端判读是否需要登陆
 if (isClient) {
 token = utils.getcookiesInClient('token')
 path = route.path;
 }
 if (path) {
 redirectURL = '/login?ref=' + encodeURIComponent(path)
 }
 //需要进行权限判断的页面开头
 if (!token) {
  redirect(redirectURL)
 }
}

utils.js里面的方法

import Cookie from 'js-cookie'
export default {
 //获取服务端cookie
 getcookiesInServer:function (req) {
 let service_cookie = {};
 req && req.headers.cookie && req.headers.cookie.split(';').forEach(function (val) {
  let parts = val.split('=');
  service_cookie[parts[0].trim()] = (parts[1] || '').trim();
 });
 return service_cookie;
 },
 //获取客户端cookie
 getcookiesInClient:function (key) {
 return Cookie.get(key) ? Cookie.get(key) : ''
 }
}

到这里,我们的中间件,权限判断依据完成了

三:运用到项目中

在项目中。例如,用户信息设置页面,需要进行是否登录判断

pages/user/setting.vue

我们在页面中运用刚刚编写的userAuth中间。

middleware: 'userAuth',

现在

setting页面就有权限判断了

基于nuxt.js渲染的 ssr 网站可以愉快的运行起来了。

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

Javascript 相关文章推荐
Safari5中alert的无限循环BUG
Apr 07 Javascript
javascript实现英文首字母大写
Apr 23 Javascript
正则表达式优化JSON字符串的技巧
Dec 24 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
Nov 02 Javascript
js 定位到某个锚点的方法
Nov 19 Javascript
Vue Router的懒加载路径的解决方法
Jun 21 Javascript
vue 修改 data 数据问题并实时显示的方法
Aug 27 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
JavaScript数值类型知识汇总
Nov 17 Javascript
JS数据类型STRING使用实例解析
Dec 18 Javascript
js中switch语句的学习笔记
Mar 25 Javascript
详解关于Vue单元测试的几个坑
Apr 26 Javascript
Nuxt.js SSR与权限验证的实现
Nov 21 #Javascript
详解nuxt路由鉴权(express模板)
Nov 21 #Javascript
使用vue-cli webpack 快速搭建项目的代码
Nov 21 #Javascript
Angular刷新当前页面的实现方法
Nov 21 #Javascript
详解ES6系列之私有变量的实现
Nov 21 #Javascript
jQuery实现上下滚动公告栏详细代码
Nov 21 #jQuery
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 #Javascript
You might like
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
js实现聊天对话框
2020/02/08 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
pytorch之添加BN的实现
2020/01/06 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
产品销售员岗位职责
2013/12/18 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
座谈会主持词
2014/03/20 职场文书
党校学习个人总结
2015/02/15 职场文书
文艺节目主持词
2015/07/06 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python