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 相关文章推荐
找到一点可怜的关于dojo资料,谢谢作者!
Dec 06 Javascript
IE、FF浏览器下修改标签透明度
Jan 28 Javascript
jquery获取tagName再进行判断
May 29 Javascript
总结jQuery插件开发中的一些要点
May 16 Javascript
对象转换为原始值的实现方法
Jun 06 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
Jul 01 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
Dec 17 Javascript
微信小程序wx.request拦截器使用详解
Jul 09 Javascript
深入理解javascript prototype的相关知识
Sep 19 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
Jan 29 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中调用其他系统http接口的方法说明
2014/02/28 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
挂科检讨书范文
2014/02/20 职场文书
行政监察建议书
2014/05/19 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
小学生通知书评语
2014/12/31 职场文书
感谢信模板大全
2015/01/23 职场文书
紧急通知
2015/04/17 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server