Chrome扩展程序:带有手动检索访问令牌的Facebook OAuth?

时间:2011-12-04 21:27:52

标签: facebook google-chrome-extension facebook-javascript-sdk

Facebook Oauth Documentation所述,为了将客户端流程与桌面应用程序一起使用,需要特殊的return_uri https://www.facebook.com/connect/login_success.html

从Chrome打开新标签页面

https://www.facebook.com/dialog/oauth?client_id=MYAPPID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token

按预期工作,我被重定向到login_success页面,其中包含令牌的access_token参数。我可以使用简单的GET请求(例如,使用jQuery)从Graph API请求数据:

$.getJSON("https://graph.facebook.com/me", {access_token : token}, function (d) 
   {
     .. process returned data
    });

我的问题是,我是否可以使用SDK的内部授权方法继续使用Javascript SDK 而不是

FB.getLoginStatus返回错误,表明我的Connect / Canvas URI不正确。如果没有这种方法,我应该如何检查令牌状态[除了手动GET和响应匹配]?

FB.login显然因以下错误而失败:

  

API错误代码:191

     

API错误说明:指定的URL不属于应用程序

     

错误消息:redirect_uri无效

(url与应用程序配置中的域url不匹配),因为似乎无法在内部指定上面的return_uri。

在外部访问令牌时,有没有办法依赖Javascript SDK(尤其是事件)?我应该覆盖访问令牌吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以将它用于正常事件(即有人点击了类似按钮),如下所示:

<div id="fb-root"></div>
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js#xfbml=1" id="facebook-jssdk"></script>
<script type="text/javascript">
    FB.Event.subscribe('edge.create',
        function(response) {
            console.log(response);
        }
    );
</script>

不幸的是,对于常规API调用,您无法在扩展中使用Facebook JS SDK。你必须为此推出自己的API包装器。

查看访问令牌是否有效的简单方法是使用您保存的访问令牌对/ me?fields = id进行图形API调用。这将很快,您可以使用响应来查看访问令牌是否仍然有效。扩展程序的最佳做法是请求权限offline_access

另外,我建议将重定向URI放在您拥有的域上。这样,如果其他扩展程序正在执行相同操作,则脚本不会干扰。访问令牌将是相同的。