详解nuxt路由鉴权(表达模板)

  

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

  

表达依赖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路由鉴权(表达模板)