如何解决使用fastify-session和fastify-webockets时,如何获得对会话的访问?
当我在Fastify应用程序中同时使用fastify-websocket和fastify-session时,我遇到了问题。
fastify.get( myWebsocketPath,websocket: true },async (connection,rawRequest) => {
console.log(`request for websocket connection`)
if( request.session.authenticated ) {
myApi( connection.socket )
}
})
除了失败之外,因为我只有rawRequest,没有用会话修饰的常规请求。
解决方法
似乎要获取外部句柄,您需要自己设置会话存储。最好使用自定义存储,但是为了简单起见,在本示例中,我将使用fastify-session
提供的内置存储。
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指出正确的方向。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。