2016-06-18 6 views
1

私はいくつかのOauthデータをセッションに保存しましたが、もう一度アクセスしたいので、そのアクセストークンを供給するためのローカルAPIエンドポイントを作成しました。しかし、メソッドを介してそのリクエストを行うと、リクエストボディが含まれていないので、実際にはreq.session.access_tokenを取得することはできません。Node.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を、取得の問題を抱えています。サーバーはのセッションID(通常はsessionidまたはsidという名前)を使用して、すべてのリクエストのヘッダーで送信されるCookieのCookieを保存します。だから、おそらくcookieが正しく送信されているかどうか、それにsessionidが含まれているかどうかを確認するために、リクエストヘッダー(ソケット接続後に行われたリクエスト)を確認する必要があります。
2.ソケットが接続するときにサイトのaccesstokenを要求するようにクライアントに指示しているので、サーバがOauth access_tokenを取得して他のアプリに情報を要求または送信することができます。これは、ちょうどsocket request's headerからセッションIDを取得して、それとこのユーザーのセッションデータを取得する可能性があるので、オーバーヘッドのビット(リクエストが多すぎます)です。しかし、これはフレームワークのセッション機能がreqオブジェクトからのセッションIDを自動的にチェックすることができないので、少し微調整が必​​要な場合があります。セッション機能が関連する機能を提供していない場合は、フレームワークでダイビングする必要があります。しかし、計画1がうまくいかない場合は、代替案です。(1つのリクエストを保存するのでよりエレガントです:)(しかし、より難しいかもしれません:())

関連する問題