2013-10-10 26 views
1

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

我们遇到的最初问题是Google不支持访问多个顶级域名。为了解决这个问题,我们通过一个顶级域名代理流量,它只是作为一个中介,将请求转发给oAuth提供商,并将回调传递给我们不同的顶级域名。这一切都适用于谷歌,但不涉及到Facebook。

Facbook的操作有点不同,它会检查当前的网址是否为a)是否在应用程序域中? b)请求初始OAuth对话框时使用的重定向URI是否相同?

我们的流程就是这样。

请求允许 顶级域名 - >代理 - > Facebook的OAuth的

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

因为重定向URL被设置为代理服务器当用户允许权限时,我无法使用初始顶级域名从API获取任何信息。

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

任何人都有任何线索如何解决这个问题?

+0

您还必须通过代理域进行访问令牌的代码交换。 – CBroe

+0

这就是我卡住的地方。基本Facebook类使用当前的url(getCurrentUrl()),而不是为此重写的url。所以每当我尝试交换令牌的代码时,它都会使用我的顶级域名。然后抛出一个异常与域中的冲突。我可以改变基本的脸书功能,以适应我的喜好,但不知道这是否是正确的做法。 :p –

回答

0

的PHP SDK可以让你在替代REDIRECT_URI传:

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

Facebook的应用程序设置页面,您还可以设置多个域或子域与您的应用程序来使用,所以一定要确保全部加入你的基地域到设置页面(在App Domains下)。

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