我知道 facebook 允许我为我的应用程序指定多个域。
但在“使用 Facebook 登录的网站”中,我只能指定一个网址。
我是否可以使用同一个 App 对 domain.se、domain.dk 和 domain.net 上的用户进行身份验证?还是应该为每个域创建一个应用程序?
我知道 facebook 允许我为我的应用程序指定多个域。
但在“使用 Facebook 登录的网站”中,我只能指定一个网址。
我是否可以使用同一个 App 对 domain.se、domain.dk 和 domain.net 上的用户进行身份验证?还是应该为每个域创建一个应用程序?
技术上可以在多个域上使用Facebook Connect,但有一些限制(最多 5 个域)。
因此,执行此操作的关键是在您的应用设置下的“应用域”字段中添加所有域。
但是,问题是 Facebook 只允许您添加从 Canvas URL 或站点或页面标签 URL 派生的域,因此如果您尝试输入其他任何内容,则会收到如下所示的错误:
解决方案是使用添加平台按钮在 Facebook、网站和Facebook 选项卡上创建应用程序,然后输入指向您其他域的 URL。这是我的意思的一个例子:
如果您为每个字段使用唯一域,则最多可以使用 5 个不同的域。我已经用最多 3 个域测试了这种技术,但我认为它应该适用于所有 5 个域。
注意:Facebook 管理员功能会不时更改,因此所有这些都可能会发生变化
只要您App Domains
在应用程序设置中列出了所有所需的设置,您就应该能够在其中任何一个上对用户进行身份验证。
“使用 Facebook 登录的网站”实际上仅用作指向您的网站/应用程序的链接。
更新 2(2016 年 7 月):
应用程序域必须与 Secure Canvas URL、移动站点 URL、Unity 二进制 URL、站点 URL 或安全页面选项卡 URL 的域匹配。
更新(2013 年 12 月):
在撰写原始答案时,可以在应用程序设置中列出任何域,但从那时起,应用程序设置的 UI(以及处理应用程序域的方式)至少更改了几次,在在某些时候,您只能列出从应用程序的画布页面之一派生的域。
截至2013 年 12 月,可以(再次)列出不是从应用程序画布 URL 派生的域。
假设您的域由同一个 Web 服务器提供服务并且您可以访问该 Web 服务器,您可以使用手动登录过程: https ://developers.facebook.com/docs/facebook-login/manually-build-a- login-flow从任意多个域登录。
假设您的域是 site1.com,site2.com.... 而不是使用 Facebook javascript API,您只需在每个站点上放置一个普通的使用 Facebook 登录按钮,该按钮会将浏览器重定向到 Facebook 登录页面,如所述在上面的文章中。在状态变量中,您可以指定一个代码,该代码指示您的哪些站点正在请求登录。在重定向中,您将使用您分配给您的网络服务器的单个服务域(例如 fb.mywebserver.com),并且您在 facebook 登录设置页面中将其指定为经过验证的重定向 url。所有站点都会重定向到同一个 url,避免了支持多个域的问题。
用户登录后,浏览器将重定向到 fb.mywebserver.com 并将状态传递给它,该状态告诉您哪个站点正在请求登录以及您可以在后端使用该代码使用 Facebook 检索用户信息图形 API。您将此信息与 uid 一起存储在您的数据存储中,然后使用状态中的信息,您重定向到适当的站点,包括指示 Facebook 登录的参数(例如 site1.com?fbc={some uid})。浏览器会乖乖地调用 site1.com?fbc... 您的 Web 服务器将收到此请求并检测 fbc 参数,该参数告诉它将相应的 Facebook 登录用户与该站点相关联。然后,它可以使用 uid 检索登录的用户信息,例如,为该用户返回一个会话 cookie 以及页面。
从用户的角度来看,他们按下“使用 Facebook 登录”按钮,被重定向到他们登录的 Facebook 登录页面,然后在登录状态下被重定向回您的站点。不如登录弹出窗口那么好,但可能可以接受。
谷歌登录也可以使用类似的过程
我发现在开发/生产场景中做的最好的事情是添加一个“测试应用程序”,然后为您的开发网站添加一个平台 - 因为如果您使用它,您必须提供“页面标签 url”的位置一个平台。
如果您需要申请状态或权限审查,Facebook 要求您的“页面 url”是实时/可访问的。
这让我了解了“登录开发”/“登录生产”场景。