首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fastify-session和fastify-webockets时,如何访问会话?

使用fastify-session和fastify-webockets时,如何访问会话?
EN

Stack Overflow用户
提问于 2020-10-23 19:01:51
回答 1查看 509关注 0票数 0

当我在我的应用程序中同时使用fastify-websocketfastify-session时,我遇到了一个问题。

代码语言:javascript
复制
  fastify.get( myWebsocketPath, websocket: true },
               async (connection, rawRequest) => {

    console.log(`request for websocket connection`)
    if( request.session.authenticated ) {
      myApi( connection.socket )
    }
  })

除非这会失败,因为我只有rawRequest,而不是用会话修饰的常规请求。

EN

回答 1

Stack Overflow用户

发布于 2020-10-24 00:29:29

似乎要为它获取一个外部句柄,您需要自己设置会话存储。最好使用定制存储,但为了简单起见,在本例中我将使用fastify-session提供的内置存储。

代码语言:javascript
复制
let fastifySession = require(`fastify-session`)
let mySessionStore = new fastifySession.MemoryStore /// TODO: customize
let options = { store: mySessionStore, secret: `itsasecrettoeverybody`,  cookieName: `sessionId`, expires: 3600000, cookie:  { secure: false } }
fastify.register(fastifySession, options)

// ...

const routes = async (fastify, options) => {
  fastify.get( myWebsocketPath, websocket: true },
               async (connection, rawRequest) => {

    /// Retrieve the session
    let cookies = rawRequest.headers.cookie.split(`;`)
    for( c of cookies ) {
      if( c.startsWith(`sessionId=`) ) {

        /// Get SessionID from the cookie
        let sessionID = c.substring(10).trim()
        sessionID = sessionID.substring( 0, sessionID.indexOf(`.`) )

        /// Collect session and check the authentication state.
        mySessionStore.get( sessionID, ( o, session ) => {
          if( session != null && session.authenticated == true ) {
            myApi( connection.socket )
          }
        })
        break
      }
    }
  })
}

感谢Zekth为我指明了正确的方向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64498762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档