1

我们运行一个服务于多个顶级域的 Web 应用程序。我们目前正在尝试通过 OAuth(Google、Facebook、Twitter)对用户进行身份验证。

我们最初遇到的问题是 Google 不支持访问多个顶级域。为了解决这个问题,我们通过一个顶级域代理流量,它只是充当中介,将请求转发到 oAuth 提供者,并将回调转发到我们不同的顶级域。这一切都适用于谷歌,但对于 facebook 则不然。

Facbook 做了一些不同的事情,它检查您当前的 url 是否是 a) 在应用程序域中?b) 请求初始 OAuth 对话时使用的重定向 uri 是否相同?

我们的流程是这样的。

请求权限 顶级域 -> 代理 -> Facebook OAuth

回调 Facebook OAuth -> 代理 -> 顶级域

因为当用户允许权限时重定向 url 设置为代理 URL,所以我无法使用初始顶级域从 api 获取任何信息。

产生的异常是:{"error":{"message":"验证验证码时出错。请确保您的 redirect_uri 与您在 OAuth 对话请求中使用的相同","type":"OAuthException","code ":100}}

任何人都知道如何解决这个问题?

4

1 回答 1

0

PHP SDK 允许您传入一个替代的 redirect_uri:

$login_url = $facebook->getLoginUrl( array( 'redirect_uri' => '{TLD URL}', 'scope' => '{SCOPE}' ) );

Facebook 应用程序设置页面还允许您设置多个域或子域以与您的应用程序一起使用,因此请确保您的基本域都已添加到设置页面(在 下App Domains)。

使用这两种方法应该可以为您解决问题。

于 2014-01-14T13:40:05.633 回答