`
deepnighttwo
  • 浏览: 51936 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 

分享到:
评论
1 楼 qjzxhurong 2013-01-11  
请问博主有通过facebook的api抓取东西过吗?一个channel的墙(wall),它上面的文章(article)有些能通过api抓到,有些在api里是没有的。造成少数无法抓取到,这种现象的原因博主有研究过吗?

相关推荐

    Laravel开发-laravel-facebook-sdk

    在本文中,我们将深入探讨如何在Laravel框架中使用laravel-facebook-sdk进行Facebook应用程序的集成。...记得时刻关注Facebook的开发者文档,因为其API可能会随时间更新,确保你的应用程序始终与最新的API版本兼容。

    Laravel开发-facebook

    确保熟悉 Facebook 开发者文档,以充分利用 SDK 提供的所有可能性。 最后,要记住,Facebook API 有时会有变更,因此定期检查 SDK 更新和 Facebook 的开发者政策是必要的,以确保你的应用始终保持兼容性和合规性。...

    Swift-AppAuth是用于iOS和MacOS的OAuth和OpenIDConnect客户端

    总的来说,Swift-AppAuth是实现OAuth 2.0和OpenID Connect身份验证的关键工具,它提供了一套安全、高效的解决方案,帮助开发者构建可靠的身份验证系统。通过深入理解和使用这个库,你可以为你的iOS和macOS应用添加...

    Laravel开发-laravel-facebook

    在开发过程中,要考虑到用户可能拒绝授权、Facebook API 可能出现错误等情况,编写适当的错误处理代码。同时,使用模拟器或真实 Facebook 账户进行测试,确保功能正常。 ### 9. 性能优化 为了提高性能,可以考虑...

    Python库 | ext_auth-0.1.10.tar.gz

    安装完成后,可以在项目中导入`ext_auth`模块,根据提供的API文档和示例代码来实现用户认证和授权功能。 对于初学者或开发者来说,理解和掌握`ext_auth`库的使用至关重要,因为它可以帮助构建稳定且安全的后端系统...

    PyPI 官网下载 | dj-rest-auth-2.1.3.tar.gz

    总的来说,dj-rest-auth是一个强大且灵活的认证授权库,它为Django RESTful API提供了便捷的身份验证和授权解决方案。无论你是初学者还是经验丰富的开发者,dj-rest-auth都是构建安全、高效API的一个值得信赖的伙伴...

    PyPI 官网下载 | incuna-auth-7.4.0.tar.gz

    在实际应用中,"incuna-auth"提供了丰富的API接口,允许开发者轻松集成到自己的项目中。例如,它可以与Django、Flask等Web框架无缝配合,实现用户认证和授权功能。此外,这个库还支持OAuth2协议,可以与Google、...

    Python库 | fastapi_cognito-2.0.2-py3-none-any.whl

    FastAPI是一个基于Python的现代、高性能的Web框架,它基于Type hints,提供了出色的自动API文档(通过Swagger UI和Redoc)和快速的开发体验。FastAPI的主要优点是其速度和易用性,使得开发API变得更加简单。 接着,...

    Auth0.Portable:适用于.NET和Xamarin平台的Auth0 API的可移植类库

    在 .NET 和 Xamarin 开发环境中,Auth0.Portable 类库允许开发者通过简单的 API 调用来实现复杂的认证逻辑,包括OAuth2、OpenID Connect、JWT(JSON Web Tokens)等协议的支持。这对于构建跨平台的应用程序尤其有用...

    Laravel开发-extended-laravel-auth

    在实际应用中,你将需要安装`extended-laravel-auth`扩展包,按照文档配置你的项目,可能涉及修改配置文件、迁移数据库、注册服务提供者以及编写控制器和视图。同时,确保遵循最佳实践,如使用中间件来保护路由,...

    Python库 | nodeconductor-auth-social-0.7.3.tar.gz

    总结来说,"nodeconductor-auth-social"是NodeConductor项目中的一个关键组件,它提供了社交登录功能,增强了用户认证体验。对于使用NodeConductor构建云服务管理平台的开发者来说,理解和掌握这个库的使用是至关...

    IP_Works_Auth_2016_V_16.0.6588_D6-XE10.2_Downloadly.ir.rar

    5. 完善的文档和示例:IP_Works_Auth 提供详细的API参考文档,以及丰富的代码示例,帮助开发者快速上手。 二、应用场景 1. 移动应用开发:在开发跨平台移动应用时,IP_Works_Auth 可以帮助快速集成社交登录功能,...

    openid-AppAuth-Android-0.11.1-0-g5966cc7.zip

    4. `README.md`: 提供项目介绍、安装指南、使用示例和贡献方法等信息,对于开发者来说是了解项目的重要文档。 使用AppAuth库的步骤大致如下: 1. 配置:在Android项目中添加AppAuth的依赖,通常通过Gradle的依赖...

    社交媒体API

    在实际开发中,你需要了解每个社交媒体平台的API文档,因为它们都有自己特定的端点、参数和限制。例如,Facebook的Graph API提供了广泛的社交数据访问,而Instagram的API则侧重于图像和视频内容。在调用API时,要...

    wordpress-external-api-auth-multisite:通过 REST API 验证 Wordpress 登录

    在WordPress开发中,有时我们需要与外部API进行交互,例如实现社交媒体登录、云服务同步或者其他定制化的功能。...对于想要学习如何在WordPress中实现外部API认证的开发者来说,这是一个很好的实践案例。

    JustAuth-史上最全的整合第三方登录的工具,目前已支持Github、Gitee、微博、钉钉、百度、Coding、腾讯云开发者平台、OSChina、支付宝、QQ、微信、淘宝、Google、Facebook、抖音、领英、小米、微软和今日头条等第三方平台的授权登录。 Login, so easy!.zip

    史上最全的整合第三方登录的工具,目前已支持Github、Gitee、微博、钉钉、百度、Coding、腾讯云...YurunOAuthLogin: PHP 第三方登录授权 SDK阿里妈妈MUX倾力打造的矢量图标库-iconfont: 本文档中的图标大部分取自该平台

    django-docs-3.0-zh-hans_social65p_django3文档_django_

    Django 社交认证框架不仅限于文档中列出的服务,你可以轻松地扩展它以支持新的认证服务。只需创建一个新的后端类,遵循OAuth或OpenID Connect的标准,即可将新服务集成到你的应用中。 总之,Django 3.0 提供的社交...

    Facebook-OAuth-For-Unity:Facebook的团结一致

    使用`Facebook.Unity.Auth`命名空间中的类和方法,如`LoginManager`和`AccessToken`。 4. **用户登录**:调用`LoginManager.LoginWithReadPermissions`方法,传入所需的权限(如公开信息、好友列表等),启动...

    react_auth:使用MongoDB

    在本项目"react_auth"中,我们探讨了如何在React前端应用中集成用户认证功能,并与MongoDB数据库进行交互。这个项目主要关注于后端开发,利用JavaScript作为主要编程语言,构建一个安全、高效的用户身份验证系统。 ...

    PyPI 官网下载 | facebookpagewriter-0.9.tar.gz

    总结来说,`facebookpagewriter`是一个方便的Python库,用于管理Facebook页面,它提供了丰富的功能来帮助开发者更高效地与Facebook API交互。通过正确配置和使用,可以极大地提升社交媒体管理的效率。

Global site tag (gtag.js) - Google Analytics