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实现锚点(Anchor)间平滑跳转
Sep 08 Javascript
jQuery 学习6 操纵元素显示效果的函数
Feb 07 Javascript
Javascript中克隆一个数组的实现代码
Dec 06 Javascript
JS学习之表格的排序简单实例
May 16 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
JavaScript中日常收集常见的10种错误(推荐)
Jan 08 Javascript
原生js实现节日时间倒计时功能
Jan 18 Javascript
Node.js 使用流实现读写同步边读边写功能
Sep 11 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
Nov 07 Javascript
JS中移除非数字最多保留一位小数
May 09 Javascript
Vue页面骨架屏注入方法
May 13 Javascript
vue.js将时间戳转化为日期格式的实现代码
Jun 05 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操作XML作为数据库的类
2010/12/19 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
js精度溢出解决方案
2012/12/02 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
AngularJS初始化静态模板详解
2016/01/14 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
js实现小时钟效果
2020/03/25 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python实现大文件排序的方法
2015/07/10 Python
python开发之thread实现布朗运动的方法
2015/11/11 Python
Python 使用type来定义类的实现
2019/11/19 Python
python 实现多维数组(array)排序
2020/02/28 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
应届毕业生求职信范例分享
2013/12/17 职场文书
小学教研工作制度
2014/01/15 职场文书
工程安全员岗位职责
2014/03/09 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
生日答谢词
2015/01/05 职场文书
小学教师党员承诺书
2015/04/27 职场文书
不同意离婚上诉状
2015/05/23 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
python 离散点图画法的实现
2022/04/01 Python