NodeJS Facebook用户订阅:无效的OAuth访问令牌 [英] NodeJS Facebook User Feed Subscriptions: Invalid OAuth access token
问题描述
*********************** ************************************
/ pre>
makeRequest - 主机:graph.facebook.com - 路径:/v2.2/ {app_id} / subscriptions?object = user
**************************** ***************************
类型:DELETE
************ *******************************************
星期三2015年2月25日12:52:15 GMT + 0000(UTC)服务器正在侦听港口81
************************** ***************************** $
makeRequest - 主机:graph.facebook.com - 路径:/ oauth / access_token?client_id = {app_id}& client_secret = {app_secret}& grant_type = client_credentials
*************************** ******************************
类型:GET
********* ************************************************
应用访问令牌:{app_token}
************************************* ********************
makeRequest - 主机:graph.facebook.com - 路径:/v2.2/ {app_id} / subscriptions?& object =用户安培;字段=进料&安培; callback_url = {uri_encoded_ callback_url}& verify_token = {verify_token}& access_token = {app_token}
************************ *******************************
类型:POST
******** ************************************* $
成功:{error:{message:无效的OAuth访问令牌,type:OAuthException,code:190}}
所以这里我首先尝试删除当前活动的任何订阅,然后使用API发出新的应用程序访问令牌,最后进行新的订阅。这是我的初始化这个整个过程的功能:
function subscribe_facebook(http,https){
var oauth_obj = getOauthObj ( '实');
//首先删除
var url = oauth_obj.subscription_url;
var host = splitUrl(url,host);
var path = splitUrl(url,path);
path + =?object = user;
makeRequest(http,host,path,80,'DELETE',function(ret){
// Get App Access Token
url = oauth_obj.access_token_url;
host = splitUrl(url,host);
path = splitUrl(url,path);
path + =?client_id =+ oauth_obj.app_id;
path + =& client_secret =+ oauth_obj.app_secret;
path + =& grant_type = client_credentials;
makeRequest(https,host,path,443, GET',function(ret){
facebook_app_token = ret.toString()。split('|');
facebook_app_token = facebook_app_token [1];
consoleLogger(App Access Token: + b
$ b订阅(https,'facebook',443,'POST',facebook_app_token,myServer);
});
});
}
这里是它输入的订阅功能:
function subscribe(http,type,port,method,access_token,myServer){
var oauth_obj = getOauthObj(type);
var sub_post_data =;
switch(type){
casefacebook:
sub_post_data =
& object =+user+
& fields =+ feed+
& callback_url =+ encodeURIComponent(myServer +/+ type)+
& verify_token =+*****+
& access_token =+ access_token
break;
}
var host = splitUrl(oauth_obj.subscription_url,host);
var path = splitUrl(oauth_obj.subscription_url,path);
path + =? + sub_post_data;
makeRequest(http,host,path,port,method,function(ret){
consoleLogger(Success:+ ret);
});
}
我做了这个其他功能来维护社交媒体变量:
function getOauthObj(type){
var obj = {};
var authorize_url =;
var access_token_url =;
var request_token_url =;
var subscription_url =;
var app_id =;
var app_secret =;
var main_domain =;
var scope =;
switch(type){
casefacebook:
app_id ='*****';
app_secret ='**********';
main_domain ='https://graph.facebook.com/';
authorize_url ='https://www.facebook.com/dialog/oauth';
access_token_url = main_domain +'oauth / access_token';
request_token_url = main_domain +'2.2 / me';
subscription_url = main_domain +v2.2 /+ app_id +/ subscriptions;
scope ='read_stream';
break;
}
obj.main_domain = main_domain;
obj.authorize_url = authorize_url;
obj.access_token_url = access_token_url;
obj.request_token_url = request_token_url;
obj.subscription_url = subscription_url;
obj.app_id = app_id;
obj.app_secret = app_secret;
return obj;
}
由于OAuth无效,我假设我不将正确的参数传递给oauth API来执行此操作是否可以让我以正确的方向引导我?
解决方案现在它已经修复了我在某些论坛上阅读了关于不同Facebook API的论坛,其中详细说明了使用应用程序标识,与管道连接,然后可以使用应用程序秘密来代替访问令牌,但是我没有想到这可以在这里使用,但是结果可以!
*********************** ************************************
makeRequest - 主机:graph.facebook.com - 路径:/v2.2/ {app_id} / subscriptions?& object = user& fields = feed& callback_url = {callback_url}& verify_token = {verify_token}& access_token = {app_id} | {app_secret}
希望这有助于某人。
干杯。 >
Am close to tearing my hair out (as a passionate developer, should), so hopefully I can get some help on this one. After reading a bunch of forums and sifting through facebook documentation, here is a log file of trying to make a subscription to user feed's. I really only need to know if the bottom set of API's I am running should work in theory. Here is my log:
********************************************************* makeRequest - Host: graph.facebook.com - Path: /v2.2/{ app_id }/subscriptions?object=user ********************************************************* Type: DELETE ********************************************************* Wed Feb 25 2015 12:52:15 GMT+0000 (UTC) Server is listening on port 81 ********************************************************* makeRequest - Host: graph.facebook.com - Path: /oauth/access_token?client_id={ app_id }&client_secret={ app_secret }&grant_type=client_credentials ********************************************************* Type: GET ********************************************************* App Access Token: { app_token } ********************************************************* makeRequest - Host: graph.facebook.com - Path: /v2.2/{ app_id }/subscriptions?&object=user&fields=feed&callback_url={ uri_encoded_ callback_url }&verify_token={ verify_token }&access_token={ app_token } ********************************************************* Type: POST ********************************************************* Success: {"error":{"message":"Invalid OAuth access token.","type":"OAuthException","code":190}}
So here I am first trying to delete any subscriptions currently active, then using the API to get issued a new application access token, and finally to make a new subscription. Here is my function to initialize this whole process:
function subscribe_facebook(http,https) { var oauth_obj = getOauthObj('facebook'); // First Delete var url = oauth_obj.subscription_url; var host = splitUrl(url,"host"); var path = splitUrl(url,"path"); path += "?object=user"; makeRequest(http,host,path,80,'DELETE',function(ret){ // Get App Access Token url = oauth_obj.access_token_url; host = splitUrl(url,"host"); path = splitUrl(url,"path"); path += "?client_id=" + oauth_obj.app_id; path += "&client_secret=" + oauth_obj.app_secret; path += "&grant_type=client_credentials"; makeRequest(https,host,path,443,'GET',function(ret){ facebook_app_token = ret.toString().split('|'); facebook_app_token = facebook_app_token[1]; consoleLogger("App Access Token: " + facebook_app_token); subscribe(https,'facebook',443,'POST',facebook_app_token,myServer); }); }); }
And here is the subscribe function it enters:
function subscribe(http,type,port,method,access_token,myServer) { var oauth_obj = getOauthObj(type); var sub_post_data = ""; switch (type) { case "facebook": sub_post_data = "&object=" + "user"+ "&fields=" + "feed"+ "&callback_url=" + encodeURIComponent(myServer + "/" + type) + "&verify_token=" + "*****" + "&access_token=" + access_token break; } var host = splitUrl(oauth_obj.subscription_url,"host"); var path = splitUrl(oauth_obj.subscription_url,"path"); path += "?" + sub_post_data; makeRequest(http,host,path,port,method,function(ret) { consoleLogger("Success: " + ret); }); }
I made this other function to maintain the social media variables:
function getOauthObj(type) { var obj = {}; var authorize_url = ""; var access_token_url = ""; var request_token_url = ""; var subscription_url = ""; var app_id = ""; var app_secret = ""; var main_domain = ""; var scope = ""; switch (type) { case "facebook": app_id = '*****'; app_secret = '**********'; main_domain = 'https://graph.facebook.com/'; authorize_url = 'https://www.facebook.com/dialog/oauth'; access_token_url = main_domain + 'oauth/access_token'; request_token_url = main_domain + '2.2/me'; subscription_url = main_domain + "v2.2/" + app_id + "/subscriptions"; scope = 'read_stream'; break; } obj.main_domain = main_domain; obj.authorize_url = authorize_url; obj.access_token_url = access_token_url; obj.request_token_url = request_token_url; obj.subscription_url = subscription_url; obj.app_id = app_id; obj.app_secret = app_secret; return obj; }
Being that the OAuth is invalid, I'm assuming that I'm not passing the right parameters to the oauth API to do this or not - can someone steer me in the right direction?
解决方案Ok, well it's fixed now. I have read on some forums about different Facebook API's which details that using the application id, concatenated with a pipe, then the application secret can be used in place of an access token, but I didn't think this could be used here, but turns out it can!
********************************************************* makeRequest - Host: graph.facebook.com - Path: /v2.2/{ app_id }/subscriptions?&object=user&fields=feed&callback_url={ callback_url }&verify_token={ verify_token }&access_token={ app_id }|{ app_secret }
Hopefully this helps someone.
Cheers.
这篇关于NodeJS Facebook用户订阅:无效的OAuth访问令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!