2016-06-18 41 views
1

我在會話中存儲了一些Oauth數據,現在我想再次訪問它,所以我創建了一個本地API端點來提供該訪問令牌。看起來,如果我通過方法提出請求,它不包含請求主體,所以它實際上不能得到req.session.access_tokenNode.js/Express - 如何通過方法訪問會話數據(使用套接字)?

如果輸入到地址欄中,訪問此端點將提供正確的數據,但通過方法請求時響應未定義。如果這有助於通知建議,則通過套接字調用該方法。

//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

用於快遞和socket.io的短短几天,但這裏是一個有點想法:
1.您遇到的問題越來越req.session,這是從它的會話存儲拿起服務器。服務器在sessionid(通常命名爲sessionid或sid)的幫助下完成此操作,該瀏覽器存儲在瀏覽器cookie中,該URL在每個請求的標頭中發送。所以你可能應該檢查請求頭(在套接字連接後發出的請求),看看cookie是否被正確發送,以及它是否包括我們想要的sessionid
2.當套接字連接時,您告訴客戶端在您的站點上請求accesstoken,以便服務器可以通過Oauth access_token向其他應用程序請求或發送信息(如果我理解正確的話)。由於您可能只從socket request's header獲得會話ID,然後使用該會話數據獲取此用戶的會話數據,因此這會帶來一些開銷(請求太多)。但是,這可能需要稍微調整,因爲框架的會話功能無法自動從req對象中檢查會話ID。如果會話功能沒有提供相關的功能,這可能有點困難,所以你不得不在框架中潛水。但它是一個備用,如果計劃1不工作(也更優雅,因爲它節省了一個請求:)(但可能更難以:())