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压缩混淆工具
May 16 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
Jul 08 Javascript
JavaScript中Function详解
Feb 27 Javascript
Javascript HTML5 Canvas实现的一个画板
Apr 12 Javascript
浅谈js中的in-for循环
Jun 28 Javascript
Sequelize中用group by进行分组聚合查询
Dec 12 Javascript
JS中去掉array中重复元素的方法
May 26 Javascript
vue实现单选和多选功能
Aug 11 Javascript
ionic2懒加载配置详解
Sep 01 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
layui中select,radio设置不生效的解决方法
Sep 05 Javascript
Vuex的热更替如何实现
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图片添加水印功能示例小结
2016/10/03 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
js自定义回调函数
2015/12/13 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
Python中实现的RC4算法
2015/02/14 Python
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
小学教师管理制度
2014/01/18 职场文书
国庆节活动总结
2014/08/26 职场文书
升学宴答谢词
2015/01/05 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript