我们运行一个服务于多个顶级域名的Web应用程序。我们目前正在尝试通过OAuth(Google,Facebook,Twitter)对用户进行身份验证。
我们遇到的最初问题是Google不支持访问多个顶级域名。为了解决这个问题,我们通过一个顶级域代理流量,它只是充当中介,将请求转发给oAuth提供商并回调到我们不同的顶级域。这一切都适用于谷歌,但不适用于Facebook。
Facbook会做一些不同的事情,它会检查你当前的网址是否是a)是否在app域中? b)在请求初始OAuth对话时,它是否与使用的uri相同?
我们的流程是这样的。
请求权限 顶级域名 - >代理 - > Facebook OAuth
回调 Facebook OAuth - >代理 - >顶级域名
由于当用户允许权限时,重定向URL设置为代理URL,因此我无法使用初始顶级域从api获取任何信息。
产生的异常是:{“error”:{“message”:“验证验证码时出错。请确保您的redirect_uri与您在OAuth对话框请求中使用的redirect_uri相同”,“输入”:“OAuthException” “代码”:100}}
任何人都有任何线索如何解决这个问题?
答案 0 :(得分:0)
PHP SDK允许您传入另一个redirect_uri:
$login_url = $facebook->getLoginUrl( array( 'redirect_uri' => '{TLD URL}', 'scope' => '{SCOPE}' ) );
Facebook App Settings页面还允许您设置多个域或子域以用于您的应用程序,因此请确保您的基本域都已添加到设置页面(App Domains
下)。
使用这两种方法可以解决问题。