我有一些JavaScript代码登录Facebook的用户并保存访问令牌到数据库:Facebook的访问令牌仅适用于创建Facebook应用程序用户
window.fbAsyncInit = function() {
FB.init({
appId: '<%=FaceBookApplicationId() %>',
status: false, // check login status
cookie: true,
oauth: true
});
};
function facebookLogin() {
FB.login(function(response) {
if (response.authResponse) {
__doPostBack('__Page', 'FacebookDeliveryButton: ' + JSON.stringify(response.authResponse));
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, { scope: 'offline_access,read_stream,publish_stream,user_photos' });
}
点击一个按钮触发facebookLogin(),它记录在Facebook用户中,获取包含访问令牌的Facebook会话,我将JSON序列化并发布到服务器。然后服务器将此访问令牌保存到数据库表FacebookDeliveryQueue。
我有一个Windows服务运行定期查询FacebookDeliveryQueue表,并尝试使用我们保存了访问令牌上发布用户的墙前面:
IQueryable<FacebookDeliveryQueue> toSend = objectContext.FacebookDeliveryQueues.Where(p => !p.IsDelivered);
foreach (FacebookDeliveryQueue facebookDeliveryQueueItem in toSend)
{
string facebookAccessToken = facebookDeliveryQueueItem.Cart.FacebookAccessToken;
string facebookRecipientId = facebookDeliveryQueueItem.Cart.FacebookRecipientId;
var client = new FacebookClient(facebookAccessToken);
dynamic parameters = new ExpandoObject();
parameters.message = facebookDeliveryQueueItem.Cart.CustomMessageBody;
client.Post(facebookRecipientId + "/feed", parameters);
}
我的问题是,这只是与访问令牌的作品从创建Facebook应用程序的用户。例如。
成功: 我是这个应用程序的创建者,登录并选择我的一个朋友发送消息给该信息保存到数据库,服务运行,我的消息张贴到我朋友的墙上。
失败: 我登录我的虚拟测试帐户(批准该帐户的应用程序权限),选择我的虚拟测试帐户的朋友之一,此信息保存到数据库,服务运行并引发无效访问令牌错误。
任何想法为什么?
更新:切换到Oauth登录 - 无变化。仍在收到“(OAuthException)访问令牌签名无效。”当试图张贴到朋友的墙上。
我不是很舒服,但可能您只使用可用于开发的账户的代码。用不同的“开发者”帐户试试你的代码,看看它是否有效 – ArtoAle
这是一回事吗? “开发者”帐户和普通Facebook帐户有什么区别?这个应用程序是关联我的正常Facebook的帐户。 –
我已经验证了我的测试帐户,并将其添加为此应用的管理员,并且传递仍然失败,并且出现相同的“无效访问令牌签名”异常。从我的其他“真实”帐户(我使用该帐户创建此应用)访问令牌仍然可以发布到任何朋友的墙上。 –