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下有关dom以及xml节点访问兼容问题
Nov 26 Javascript
关于JavaScript定义类和对象的几种方式
Nov 09 Javascript
jQuery表格排序组件-tablesorter使用示例
May 26 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
Jun 30 Javascript
javascript实现表格增删改操作实例详解
May 15 Javascript
JQuery核心函数是什么及使用方法介绍
May 03 Javascript
JS上传组件FileUpload自定义模板的使用方法
May 10 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
Aug 25 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
Feb 22 Javascript
Three.js实现绘制字体模型示例代码
Sep 26 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
Dec 25 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
yii操作cookie实例简介
2014/07/09 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
javascript中length属性的探索
2011/07/31 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
python2.7的编码问题与解决方法
2016/10/04 Python
答题辅助python代码实现
2018/01/16 Python
python3.6的venv模块使用详解
2018/08/01 Python
基于python生成器封装的协程类
2019/03/20 Python
python3.7 sys模块的具体使用
2019/07/22 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
怎样声明一个匿名的内部类
2016/06/01 面试题
文秘大学生求职信
2014/02/25 职场文书
教师自我鉴定范文
2014/03/20 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
杨善洲观后感
2015/06/04 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
运动员加油词
2015/07/18 职场文书
Python日志模块logging用法
2022/06/05 Python