【发布时间】:2018-01-01 17:14:00
【问题描述】:
我想在我的网站上添加 facebook 登录选项,关注 this tutorial。我按照教程中的内容做了所有操作,但仍然出现此错误:
OAuthException: redirect_uri isn't an absolute URI
如何解决?
此网址由facebookOAuthProvider 生成。该网站不在本地主机上。它在带有 https 的网络服务器上运行。
这是相关代码:
// redirect to Facebook
$facebookOAuthProvider = $this->get('app.facebook_provider');
$url = $facebookOAuthProvider->getAuthorizationUrl([
// these are actually the default scopes
'scopes' => ['public_profile', 'email'],
]);
return $this->redirect($url);
它重定向到这个网址:
https://www.facebook.com/v2.3/dialog/oauth?scopes[0]=public_profile&scopes[1]=email&state=...&scope=public_profile,email&response_type=code&approval_prompt=auto&redirect_uri=/connect/facebook-check&client_id=...
redirect_uri 确实不是绝对网址。但是如何解决呢?
编辑
如果我添加'redirect_uri' => [$redir],则网址如下所示:
https://www.facebook.com/v2.3/dialog/oauth?scopes%5B0%5D=public_profile&scopes%5B1%5D=email&scopes%5B2%5D=user_location&redirect_uri%5B0%5D=https%3A%2F%2Fexample.com%2Fconnect%2Ffacebook-check&state=...&scope=public_profile%2Cemail&response_type=code&approval_prompt=auto&client_id=...
我可以在生成的 url 中看到绝对的 redirect_uri,但如果我导航到它,我仍然会收到此错误
Redir 定义为:
$redir = $this->generateUrl('connect_facebook_check', array(), UrlGeneratorInterface::ABSOLUTE_URL);
编辑2
如果我将 [$redir] 替换为 $redir,那么 facebook 会将我正确重定向到带有代码的 /connect/facebook-check,但我在那里得到一个 OAuthException: redirect_uri isn't an absolute URI. Check RFC 3986。
【问题讨论】:
-
我看到您在stackoverflow.com/q/40537114/1427878 上提供了赏金...您的服务配置看起来与那里使用的相似吗?我猜你必须以某种方式将
UrlGeneratorInterface::ABSOLUTE_URL传递到 URL 生成过程中,否则它会在协议、域和端口匹配时默认创建相对 URL。 symfony.com/doc/current/routing.html#generating-absolute-urls -
如果我添加
'redirect_uri' => [$redir],那么我可以在生成的url中看到绝对的redirect_uri,但如果我导航到它,我仍然会收到这个错误 -
可能是url编码错误
-
您能展示完整生成的登录对话框 URL 的样子吗?
-
我编辑了问题
标签: php facebook symfony oauth symfony-3.2