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 相关文章推荐
浅谈javascript的数据类型检测
Jul 10 Javascript
基于jquery的15款幻灯片插件
Apr 10 Javascript
js跑步算法的实现代码
Dec 04 Javascript
jquery实现勾选复选框触发事件给input赋值
Feb 01 Javascript
Js与Jq获取浏览器和对象值的方法
Mar 18 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 Javascript
浅谈JavaScript的innerWidth与innerHeight
Oct 12 Javascript
Express系列之multer上传的使用
Oct 27 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
Jan 25 Javascript
详解angular脏检查原理及伪代码实现
Jun 08 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
Aug 09 Javascript
解决layUI的页面显示不全的问题
Sep 20 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
php查找任何页面上的所有链接的方法
2013/12/03 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
js实现删除li标签一行内容
2019/04/16 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
express启用https使用小记
2019/05/21 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
python基础教程之udp端口扫描
2014/02/10 Python
浅谈Python的文件类型
2016/05/30 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
python递归全排列实现方法
2018/08/18 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
Python列表切片常用操作实例解析
2020/03/10 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
100%羊绒:NakedCashmere
2020/08/26 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
广告学专业推荐信范文
2013/11/23 职场文书
银行财务部实习生的自我鉴定
2013/11/27 职场文书
C++程序员求职信范文
2014/04/14 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
德劲DE1108畅想
2021/04/22 无线电
一起来学习Python的元组和列表
2022/03/13 Python