详解nuxt路由鉴权(express模板)


Posted in Javascript onNovember 21, 2018

这里我们以用户登录鉴权为例

express依赖express-session中间件实现session功能

若我们不加载express-session组件

router.get('/user/login', function (req, res) {
 console.log(req,req.session)
})

会发现不存在session对象

引入express-session组件

// server/index.js文件
...
import session from 'express-session'
...
app.use(session)
...

然后再试试

router.get('/user/login', function (req, res) {
 console.log(req.session)
})

这时可以看到打印出空数组对象。。。好了,下面就可以使用了

import {Router} from 'express'
const router = Router()
import request from 'superagent'
router.get('/user/login', function (req, res) {
  request
   .get(path)
   .query(req.query)
   .set('Content-Type', 'application/json;charset=UTF-8')
   .end((err, _res) => {
    if (_res.body.code === 200) {
     req.session.authUser = _res.body.data //将返回的用户数据存到session
    }
    res.json(_res.body)
   })
}

seeesion搞定了,怎么进行鉴权呢?

首先,将用户session保存到store,以便全局取用
nuxtServerInit 方法:如果在状态树中指定了 nuxtServerInit 方法,Nuxt.js 调用它的时候会将页面的上下文对象作为第2个参数传给它(服务端调用时才会酱紫哟)。当我们想将服务端的一些数据传到客户端时,这个方法是灰常好用的。

举个例子,假设我们服务端的会话状态树里可以通过 req.session.user 来访问当前登录的用户。将该登录用户信息传给客户端的状态树,我们只需更新 store/index.js 如下:

actions: {
 nuxtServerInit ({ commit }, { req }) {
  if (req.session.user) {
   commit('user', req.session.user)
  }
 }
}

这样我们就可以通过判断store中user的状态来知道用户是否登录。

在跳转时需要鉴权的页面添加中间件:

export default{
  middleware: auth
}

auth.js

export default function ({store,redirect}) {
 if (!store.state.authUser) {
    return redirect('/user/login')
  }
}

大概流程:a?>b middleware鉴权未登录,跳转登录页面登录,调用登录接口保存用户session,返回a,再次跳转b,nuxtServerInit 从上下文对象中获取session保存在store,鉴权成功,跳转成功。

拓展:connect-redis

sever/index配置

import express from 'express'
import {
 Nuxt,
 Builder
} from 'nuxt'
import session from 'express-session'
import redis from 'connect-redis'
import bodyParser from 'body-parser'
import api from './api'
import serverConfig from './config' //redis配置文件

const app = express()
const host = process.env.HOST || '127.0.0.1'
const port = process.env.PORT || 3000

const RedisStore = redis(session)
app.use(bodyParser.json())

app.use('/static', express.static('static'))

app.use(session({
 name: 'sid',
 secret: 'Asecret123-',
 resave: true,
 rolling: true,
 saveUninitialized: false,
 store: new RedisStore(serverConfig)
}))

app.set('port', port)

// Import API Routes
app.use('/api', api)

app.use('/', api)

// Import and Set Nuxt.js options
let config = require('../nuxt.config.js')
config.dev = !(process.env.NODE_ENV === 'production')

// Init Nuxt.js
const nuxt = new Nuxt(config)

// Build only in dev mode
if (config.dev) {
 const builder = new Builder(nuxt)
 builder.build()
}

// Give nuxt middleware to express
app.use(nuxt.render)

// Listen the server
app.listen(port, host)
console.log('Server listening on ' + host + ':' + port) // eslint-disable-line no-console

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 一些用法小结
Sep 11 Javascript
node.js中的fs.lstat方法使用说明
Dec 16 Javascript
JavaScript删除数组元素的方法
Mar 20 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
Jun 21 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
js数组实现权重概率分配
Sep 12 Javascript
10分钟上手vue-cli 3.0 入门介绍
Apr 04 Javascript
mpvue 单文件页面配置详解
Dec 02 Javascript
js实现内置计时器
Dec 16 Javascript
js中switch语句的学习笔记
Mar 25 Javascript
mustache.js实现首页元件动态渲染的示例代码
Dec 28 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
vue  directive定义全局和局部指令及指令简写
Nov 20 #Javascript
详解Vue.js在页面加载时执行某个方法
Nov 20 #Javascript
You might like
怎样去阅读一份php源代码
2009/08/21 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
javascript document.images实例
2008/05/27 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
哪些是python中web开发框架
2020/06/17 Python
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
意大利奢侈品网站:Italist
2016/08/23 全球购物
百联网上商城:i百联
2017/01/28 全球购物
2014庆六一活动方案
2014/03/02 职场文书
党员公开承诺书
2014/03/25 职场文书
学生操行评语大全
2014/04/24 职场文书
工作会议方案
2014/05/21 职场文书
2014年学校工作总结
2014/11/20 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
农村党员干部承诺书
2015/05/04 职场文书
运动会宣传语
2015/07/13 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python