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 相关文章推荐
jquery插件制作简单示例说明
Feb 03 Javascript
使用jQuery的attr方法来修改onclick值
Jul 07 Javascript
Bootstrap下拉菜单效果实例代码分享
Jun 30 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
Sep 01 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
vuex实现购物车功能
Jun 28 Javascript
antd 表格列宽自适应方法以及错误处理操作
Oct 27 Javascript
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
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
模仿OSO的论坛(三)
2006/10/09 PHP
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
Python使用OpenCV进行标定
2018/05/08 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python3 logging日志封装实例
2020/04/08 Python
python怎么调用自己的函数
2020/07/01 Python
python中二分查找法的实现方法
2020/12/06 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
2014年公司庆元旦活动方案
2014/03/05 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
经济贸易系求职信
2014/08/04 职场文书
机器人瓦力观后感
2015/06/12 职场文书
PHP中->和=>的意思
2021/03/31 PHP
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS