这里我们以用户登录鉴权为例
表达依赖express-session中间件实现会话功能
若我们不加载express-session组件
路由器。得到(/user/登录,函数(点播,res) { req.session console.log(要求) }) >之前会发现不存在会话对象
引入express-session组件
//服务器/index.js文件 … 从“express-session”导入会话 … app.use(会话) …然后再试试
路由器。得到(/user/登录,函数(点播,res) { console.log (req.session) })这时可以看到打印出空数组对象…好了,下面就可以使用了
从“表达”进口{路由器} const路由器=路由器() 进口的要求“搞” 路由器。得到(/user/登录,函数(点播,res) { 请求 . get(路径) .query (req.query) 这里(“内容类型”、“application/json; charset=utf - 8”) 指标(最终(呃,_res)=比;{ 如果(_res.body。代码===200){ req.session。authUser=_res.body。//将数据返回的用户数据存到会话 } res.json (_res.body) }) }seeesion搞定了,怎么进行鉴权呢& # 63;
首先,将用户会话保存到商店,以便全局取用
nuxtServerInit方法:如果在状态树中指定了nuxtServerInit方法,Nuxt。js调用它的时候会将页面的上下文对象作为第2个参数传给它(服务端调用时才会酱紫哟)。当我们想将服务端的一些数据传到客户端时,这个方法是灰常好用的。举个例子,假设我们服务端的会话状态树里可以通过req.session。用户来访问当前登录的用户。将该登录用户信息传给客户端的状态树,我们只需更新存储/索引。js如下:
行动:{ nuxtServerInit({},{点播}){ 如果(req.session.user) { 提交(“用户”,req.session.user) } } } >之前这样我们就可以通过判断商店中用户的状态来知道用户是否登录。
在跳转时需要鉴权的页面添加中间件:
出口默认{ 中间件:身份验证 } >之前auth.js
出口的默认函数({商店,重定向}){ 如果(! store.state.authUser) { 返回重定向(/user/登录) } }大概流程:→b中间件鉴权未登录,跳转登录页面登录,调用登录接口保存用户会话,返回,再次跳转b, nuxtServerInit从上下文对象中获取会话保存在商店,鉴权成功,跳转成功。
<>强拓展:connect-redis 强>
切断/索引配置
从“表达”进口表达 进口{ Nuxt, 构建器 从“nuxt”} 从“express-session”导入会话 从“connect-redis”进口复述, 从“体”进口bodyParser 从“进口api。/api ' 从“进口serverConfig。/config//复述,配置文件 const应用=表示() 主机=process.env const。主机| |“127.0.0.1”=process.env const港口。港| | 3000 const RedisStore=复述(会话) app.use (bodyParser.json ()) app.use(/静态,express.static(静态的)) app.use(会话({ 名称:“sid”, 秘密:“Asecret123——”, 重新保存:没错, 滚动:没错, saveUninitialized:假的, 存储:新RedisStore (serverConfig) })) app.set(端口,端口)//导入API路线 app.use (/api, api) app.use ('/', api)//导入和Nuxt设置。js选项 让配置=要求(“. ./nuxt.config.js”) config.dev=! (process.env。NODE_ENV===?//初始化Nuxt.js const nuxt=new nuxt(配置)//构建只有在开发模式 如果(config.dev) { const builder=new builder (nuxt) builder.build () }//给nuxt中间件来表达 app.use (nuxt.render)//监听服务器 app.listen(端口、主机) 控制台。日志(服务器监听的+主机+‘:’+端口)//eslint-disable-line no-console以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
详解nuxt路由鉴权(表达模板)