Session 使用fastify会话和fastify webockets时,如何访问会话?

Session 使用fastify会话和fastify webockets时,如何访问会话?,session,websocket,session-variables,session-state,fastify,Session,Websocket,Session Variables,Session State,Fastify,当我在Fastify应用程序中同时使用和时,我遇到了一个问题 fastify.get( myWebsocketPath, websocket: true }, async (connection, rawRequest) => { console.log(`request for websocket connection`) if( request.session.authenticated ) { myApi( connec

当我在Fastify应用程序中同时使用和时,我遇到了一个问题

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

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

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

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

let fastfysession=require(`fastfy session`)
让mySessionStore=new fastifySession.MemoryStore///TODO:自定义
let options={store:mySessionStore,secret:`itsasecrettoEveryone`,cookieName:`sessionId`,expires:3600000,cookie:{secure:false}}
fastify.注册(fastify会话,选项)
// ...
const routes=async(fastfy,选项)=>{
get(myWebsocketPath,websocket:true},
异步(连接、请求)=>{
///检索会话
让cookies=rawRequest.headers.cookie.split(`;`)
(c)曲奇饼{
if(c.startsWith(`sessionId=`)){
///从cookie中获取SessionID
设sessionID=c.substring(10).trim()
sessionID=sessionID.substring(0,sessionID.indexOf(`.`))
///收集会话并检查身份验证状态。
mySessionStore.get(sessionID,(o,session)=>{
if(session!=null&&session.authenticated==true){
myApi(connection.socket)
}
})
打破
}
}
})
}
泽克斯为我指明了正确的方向