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。

转载于:https://www.cnblogs.com/deepnighttwo/archive/2011/02/26/1966059.html

Facebook Auth API文档中没说清楚的事情 (2011-02-28更新)相关推荐

  1. Java API 文档中的接口方法和抽象方法,有什么区别?

    欲知详情,猛戳:https://www.zhihu.com/question/445956288

  2. api接口文档中的签名是什么

    文章目录 前言 一.api文档中的签名是什么? 二.对文档规则中的签名算法的认识 三.生成签名的函数 总结 前言 初入程序员行列,随着工作的不断展开,我对业务上的逻辑也逐渐熟悉.在开发过程中少不了看a ...

  3. 为TypeScript项目生成API文档

    为TypeScript项目生成文档 使用typedoc为TypeScript项目生成API文档. 1. 使用typedoc生成HTML文档 需要安装 typedoc. npm i typedoc 可以 ...

  4. 查看Android API文档的正确方式

    AS中简单查看API 在AS中我们可以简单查看函数或类的API,选中我们想要查看的函数或类的代码,按快捷键 Ctrl+Q,AS就会弹出一个简单说明的窗口: 但一般我们的是这样: 那是因为AS去访问Go ...

  5. swagger api文档_带有Swagger的Spring Rest API –创建文档

    swagger api文档 使REST API易于使用的真正关键是好的文档. 但是,即使您的文档做得很好,您也需要设置公司流程的权利以正确,及时地发布它. 确保利益相关者按时收到是一回事,但是您也要负 ...

  6. 关于深度学习框架Hamaa与Python API文档生成工具Sophon

    五月两场 | NVIDIA DLI 深度学习入门课程 5月19日/5月26日一天密集式学习  快速带你入门阅读全文> 正文共1988个字,预计阅读时间12分钟. 前言 最近三个月我主要花时间在造 ...

  7. 什么是API? [如何编写和阅读API文档]

    随着API在互联网时代中变得越来越普遍,不仅是编程人员会用到,现在也会要求产品经理或互联网运营会调试和对接API.看这篇文章的你可能会使用或开发API,或者两者兼而有之. 因此,对你来说,不仅要了解如 ...

  8. JS-ES6 jsdoc通过注解生成-更具规格的API文档

    前言: 在敏捷开发的过程中或者说是项目后期维护的过程中,文档是必不可少的,可以避免过多的交流从而加快项目的速度,今天介绍的就是一款基于前端的工具jsdoc,他能够根据代码中的注释很快生成API文档,只 ...

  9. Java API文档中文版

    Java API文档中文版 Sun 公司提供的Java API Docs是学习和使用Java语言中最经常使用的参考资料之一.但是长期以来此文档只有英文版,对于中国地区的Java开发者来说相当的不便.目 ...

最新文章

  1. 什么是机器人底盘 答案在这里!
  2. 服务端如何防止订单重复支付!
  3. LinkedIn工程经理眼中的数据世界格局
  4. IOS SEL (@selector) 原理及使用总结(一)
  5. 在vue项目中引入高德地图及其UI组件的方法
  6. Keepalived安装
  7. python ctypes 回调函数_Python ctypes中具有自定义类型的回调
  8. SqlServer 根据一个表数据更新另外一个表
  9. IM推送保障及网络优化详解(二):如何做长连接加推送组合方案
  10. boost::safe_numerics::cpp相关的测试程序
  11. ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、Server.MapPath的区别...
  12. 图解Python 3.x多继承时方法解析顺序MRO
  13. eclipse配置jboss
  14. Android APP开发入门教程
  15. windwos安装Android NDK(Native Development Kit)
  16. 为什么说前端开发难?前端开发难在哪里?
  17. cas27647-84-3四羧基苯基卟啉锌;四羧基苯基锌卟啉TCPP-Zn(2+)/分子量:850.116160000001
  18. 微信h5使用audio不会自动播放
  19. linux命令行控制fluent,linux 提交任务的命令(ansys lsdyna abaqus fluent)
  20. 三只松鼠前高管盗卖废旧纸箱获利68万被判刑

热门文章

  1. python 语料标注_在python中怎么标记文本?
  2. mysql事务并发控制_mysql事务和多版本并发控制详解
  3. 计算机考研数学试卷类型,数学会是你的计算机考研拦路虎吗?
  4. python3-泊松分布
  5. 手机自动化测试:Appium源码分析之跟踪代码分析四 1
  6. C++ union 使用总结
  7. ON REG EXPRESSION.SYNTAX
  8. ffmpeg命令 音频文件格式转换
  9. Activiti7工作流基础
  10. Typora入门(1)