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的一行代码轻松实现拖动效果
Dec 28 Javascript
5款JavaScript代码压缩工具推荐
Jul 07 Javascript
显示今天的日期js代码(阳历和农历)
Sep 30 Javascript
深入理解JS DOM事件机制
Aug 06 Javascript
微信公众号 客服接口的开发实例详解
Sep 28 Javascript
VueJS全面解析
Nov 10 Javascript
详解本地Node.js服务器作为api服务器的解决办法
Feb 28 Javascript
Vue2 使用 Echarts 创建图表实例代码
May 18 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 Javascript
详解React native fetch遇到的坑
Aug 30 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
Nov 15 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类
2008/04/09 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
js的各种排序算法实现(总结)
2016/07/23 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
网络工程师的自我评价
2013/10/02 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
2015年路政工作总结
2015/05/22 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP
浅谈怎么给Python添加类型标注
2021/06/08 Python
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS