Facebook Auth API文档中没说清楚的事情

facebook api 的文档写的不清不楚,很多都要靠自己碰壁之后猜测和琢磨问题的原因。

下面是几个文档中没说清楚的地方:

·         The URL Facebook api 首先要使用 app 的一些 id 什么的,通过一个 link 来让用户授权这个 app 。如果用户授权后, facebook callback 到一个事前自己制定的一个 URL ,在这里,这个 callback URL “The URL” 。因为在下一步想要生成 Access Token 的时候,设置的 redirect uri 必须必须是 “The URL” 。否则就会报类似这样的错误:

{
   "error": {
      "type": "OAuthException",
      "message": "Error validating verification code."
   }
}

 

 

·         The Host Facebook 要求 callback 必须是应用程序中设置的 domain 的子 domain 或者子 domain 中的一个 link ,否则 facebook 是不会 callback 的。这点文档上倒是写的清楚了,不过无法指定 localhost ,这样就没法在本地调试程序了。

·         More About The URL callback URL 其实可以挂参数,但是生成 code 和生成 access token 的这个 URL 必须完全一样 —— 包括挂的参数。否则也会报第一条里的那个错误。而挂参数也很扯淡,推荐不要考虑挂参数。扯淡的地方有几点,首先有些字符不支持,无论是不是编码,比如 @ ,比如参数值的第一个字符不能是 d (别问我为啥。。。可能是我的环境有点问题吧)。 我的猜测是, facebook code 里面其实包含了 callback url (包括参数)的特征值信息( hash ),每次去用这个 code 生成 access token 的时候, facebook 会先验证 code 里的 hash 值和这次传递的 callback hash 值是否匹配,如果不匹配就暴第一条里的那个错误。 所以 facebook 也不知道是 code 错了还是 callback url 不对。多半是 callback url 不一致。因为 code 错了可能是下面的异常信息:

·         Code is Invalidate: 没错, code 是会过期的。这点 facebook 的文档里好像也没写清楚,只是说 access token 会过期,而且在生成 token 的时候给出了多少 s 后过期。但是 code 啥时候过期没说。 至少有一个触发条件 —— 用户手动的注销,然后再登录。根据笔者的测试,如果用户不做手动的注销动作,大概一两天 code 就会过期, 过期后再使用 code 生成 access code ,会得到下面的错误:

{
   "error": {
      "type": "OAuthException",
      "message": "Code was invalid or expired."
   }
}

当然,如果再次生成一次 code ,之前生成的 code 就自动失效,使用那个 code 也会得到上面的异常。根据文档上的说明, code 和根据这个 code 生成的 access code 是同时过期的。有效时间就是生成 token 的时候得到的那个时间。

·         Redirect ?: facebook 只能通过 redirect 才能生成 code 。如果在浏览器里,这个动作浏览器会处理,自己只要设好 redirect uri 就行了。如果想在后台自动刷新 code code 会失效的嘛),就需要在程序内部模拟 redirect 。有没有谁知道咋做,在 gae 的环境下

·         自己看文档没看全, facebook 有一个叫做 offline_access 的权限,可以生成永远不会过期的 code

 

猜你喜欢

转载自deepnighttwo.iteye.com/blog/1188758