代码之家  ›  专栏  ›  技术社区  ›  nagylzs

Facebook Oauth2-作用域id无效?

  •  1
  • nagylzs  · 技术社区  · 7 年前

    我正在尝试为一个网站实现facebook登录/自动注册。请求的作用域有问题。

    首先,我尝试使用“default”范围。根据官方文档,它提供了对UserData结构子集的访问。记录如下:

    https://developers.facebook.com/docs/facebook-login/permissions/#reference-default

    但是,如果我尝试这样做,则会出现一个错误:

    Invalid scope: default
    

    我也试着先用一些基本的东西。例如,scope=“id”。然后我得到这个错误:

    Invalid scope: id
    

    如果我尝试scope=“email first\u name last\u name middle\u name picture”,那么:

    Invalid scope: first_name
    

    到目前为止,唯一有效的方法是scope=“email”,但这还不足以进行自动注册。

    此外,文档cleary说,“除了默认的Public Profile字段外,所有权限都要求为你的应用程序启用Facebook登录和客户端OAuth登录,以允许用户或页面授予你的应用程序这些权限。” https://developers.facebook.com/docs/facebook-login/permissions/

    旁注:Facebook似乎没有遵循rfc6749。当出现错误时,Oauth2服务器( https://tools.ietf.org/html/rfc6749#section-4.1.2 更具体地说是4.1.2.1错误响应)。但Facebook并没有做到这一点。它会在facebook.com上显示一个弹出窗口,如果我在该窗口上按“OK”,它会进入一个无限循环,并不断显示相同的消息:“You are no logged in”(我为什么要这么做?)

    更新 :尽管我只使用scope=email,/me api返回了所有字段,包括first\u name、last\u name、email和profile picture。所以这些东西可能不是作用域,而是字段名。但目前还不清楚有哪些范围?文件还是很糟糕。它应该清楚地指出哪些术语是作用域,哪些是数据结构中的字段名。文档中仍然缺少一个完整的作用域列表(或者可能有一个列表,只是我找不到它?)

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   andyrandy    7 年前

    这些文档确实有点误导人,但“default”不是权限/范围,它只是告诉您需要无需额外权限即可获取的数据。如果您只需滚动到顶部,就可以在问题的链接中找到可用的权限。只有这个列表是重要的,对于默认字段,有一个链接“defaultpublicprofilefields”,但是-同样-不需要范围/权限。

    是的,范围和字段之间有很大的区别。例如 email 字段可以在使用 电子邮件 范围,但 birthday 字段需要具有 user_birthday https://developers.facebook.com/docs/graph-api/reference/v3.1/user

    推荐文章