2017-10-26 5 views
0

からaccess_tokenはとFB APIのグラフのユーザー情報を聞いて、私はは、私はアプリのクライアントによって提供access_tokenはからFacebookのAPIのグラフに私のAPIからユーザー情報を取得しようとする私のAPIのOAuthException

{ 
"error": { 
    "message": "An active access token must be used to query information about the current user.", 
    "type": "OAuthException", 
    "code": 2500, 
    "fbtrace_id": "***********" 
} 
} 

ここで、このエラーを取得しておきます私の構造を説明するための図である。

enter image description here

奇妙なこと私は簡単な操作を行う場合: curl -i -H "Accept: application/json" -H "Content-Type: application/json" https://graph.facebook.com/v2.6/me?access_token=**ACCESS_TOKEN**&field=email

私はデータで有効なjson答えを持っています。

私は私のAPIから尋ねると、私は上記のエラーを示しています... (私は私たちがダブルで回避するためにFacebookのアカウントと同じ電子メールでDB内のユーザーを持っているかどうかをチェックしたいアカウントの競合)

私はこのようにそれを行う:

var http = require("http"); 
var https = require("https"); 

/** 
* getJSON: REST get request returning JSON object(s) 
* @param options: http options object 
* @param callback: callback to pass the results JSON object(s) back 
*/ 
function getJSON(options, onResult) 
{ 
    console.log("rest::getJSON"); 

    var port = options.port == 443 ? https : http; 
    var req = port.request(options, function(res) 
    { 
     var output = ''; 
     console.log(options.host + ':' + res.statusCode); 
     res.setEncoding('utf8'); 

     res.on('data', function (chunk) { 
      output += chunk; 
     }); 

     res.on('end', function() { 
      var obj = JSON.parse(output); 
      onResult(res.statusCode, obj); 
     }); 
    }); 

    req.on('error', function(err) { 
    //  res.send('error: ' + err.message); 
    console.log(err.message + '\n'); 
    return(err); 
    }); 

    req.end(); 
}; 

/*//////////////////////////// 
//       // 
// Function /signup route // 
//       // 
*///////////////////////////// 

// router.post('/signup-fb', signup-fb) 
exports.signupFb = async (req, res) => { 
    const data = req.body; 

    console.log('login fb', data) 

    if (!data.fbToken) { 
     res.status(404); 
     res.json({success: false, message: "Fb token is blank"}); 
     res.end(); 
     return 
    } 

    var options = { 
    host: 'graph.facebook.com', 
    port: 443, 
    path: '/v2.6/me/', 
    method: 'GET', 
    body: {'access_token': data.fbToken, 
      'fields': 'id,name,email'} 
    }; 
    const tmp = await getJSON(options, function(statusCode, result) { 
    // I could work with the result html/json here. I could also just return it 
    console.log(tmp); 
    console.log("onResult: (" + statusCode + ")" + JSON.stringify(result)); 
    res.statusCode = statusCode; 
    res.send(result); 
}); 
+0

あなたは 'data.fbToken'をチェックしているが、その後、あなたは' data.access_token'を使用しています。 ..? – CBroe

+0

私はここに私のコードを入れたときにミスをしましたStackoverflow何も変わらない... – lu1her

+1

実際にそれを 'body'の中に入れるべきかどうかわかりません - POSTリクエストはボディを持っていますが、これはGETです...クエリ文字列を別々に指定するか、パスに追加します。 – CBroe

答えて

0

ANSWER

答えはコメントです。 APIのグラフを要求するために

私はこのようなパスで体の変数を追加する必要がありました:

var options = { 
    host: 'graph.facebook.com', 
    port: 443, 
    path: '/v2.6/me/?access_token='+data.fbToken+'&fields=id,name,email', 
    method: 'GET' 
}; 
関連する問題