我在会话中存储了一些Oauth数据,现在我想再次访问它,所以我创建了一个本地API端点来提供该访问令牌。看来,如果我通过方法发出请求,它不包含请求体,因此它实际上无法获得req.session.access_token
。
如果键入地址栏,则访问此端点会提供正确的数据,但在通过方法请求时,响应未定义。该方法是通过套接字调用的,如果这有助于通知建议。
//This is the endpoint
app.get('/instagram/accesstoken', function(req,res){
console.log("/instagram/accesstoken: ", req.session.access_token, ", req: ", req);
res.json({access_token: req.session.access_token});
});
//This is the method calling the endpoint
function getAccessToken(callback){
request({url: 'http://localhost:3000/instagram/accesstoken', method: "GET"}, function(err, resp, data){
console.log("getAccessToken: ", data);
if(err) { return callback(err); }
callback(null, data);
});
//Sockets
io.listen(server);
io.on('connection', function(socket){
...
getAccessToken(function(err, token){...}
...
});
我也对替代解决方案持开放态度。如何才能切实访问会话数据?感谢您的耐心等待。
答案 0 :(得分:0)
使用express和socket.io只用了几天但是有点想到:
1.您在获取req.session
时遇到问题,该问题由服务器从其会话存储中获取。服务器在存储在浏览器 cookie 中的 sessionid (通常名为sessionid或sid)的帮助下执行此操作,该文件在每个请求的标头中发送。因此,您应该检查请求标头(在套接字连接后发出的请求),以查看是否正确发送了cookie
以及它是否包含我们想要的 sessionid 。
2.当套接字连接时,您告诉客户端在您的站点上请求accesstoken
,以便服务器可以获取Oauth access_token请求或向其他应用程序发送信息(如果我理解正确的话)。这是一个开销(一个太多的请求),因为您可能只是从socket request's header获取会话ID,然后使用它获取此用户的会话数据。但是,这可能需要一些调整,因为框架的会话功能无法自动检查req
对象的会话ID。如果会话功能没有提供相关功能,那么这可能会有点困难,因此您不得不在框架中潜水。但如果计划1没有成功(它也更优雅,因为它保存了一个请求:)它可以替代它(但也可能更难:())
答案 1 :(得分:0)
要通过套接字访问会话数据,您需要使用https://www.npmjs.com/package/express-socket.io-session
之类的插件使用此功能,您可以通过套接字调用访问会话数据。