【问题标题】:OAuthException: redirect_uri isn't an absolute URI. Check RFC 3986 (Symfony)OAuthException:redirect_uri 不是绝对 URI。检查 RFC 3986 (Symfony)
【发布时间】: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


【解决方案1】:

我不知道您从哪里获得示例代码,但肯定不是来自链接教程。

Facebook 授权是基于你生成一个到 FB 的链接,用户去 FB 并授权自己,然后 FB 服务器将其重定向回你(以及它是否被授权)。

FB 不会猜测登录后将用户重定向到哪里。你需要给他一个带有http(s)和服务器名称的完整路径(如果我没记错的话,它也与保存在FB应用程序中的兼容)

附加教程需要编写一个控制器,其中包含 2 个方法(输出和返回)以及配置中的相应条目。

如果您使用this,请查看您是如何配置提供程序的。 redirectUri 中有什么内容?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2011-08-17
    • 2012-03-16
    • 2022-11-24
    • 2014-04-07
    • 2019-09-27
    • 2019-08-31
    相关资源
    最近更新 更多