OAuthException:redirect_uri不是绝对URI。检查RFC 3986(Symfony)

时间:2017-07-26 11:43:18

标签: php facebook symfony oauth symfony-3.2

我想在this tutorial之后将facebook登录选项添加到我的网站。我做了教程中的所有操作,但我仍然收到此错误:

OAuthException: redirect_uri isn't an absolute URI

如何解决它?

此网址由facebookOAuthProvider生成。该网站不在localhost上。它使用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=...

我可以在生成的网址中看到绝对redirect_uri,但如果我导航到它,我仍然会收到此错误

Redir定义为:

$redir = $this->generateUrl('connect_facebook_check', array(), UrlGeneratorInterface::ABSOLUTE_URL);

EDIT2

如果我将[$redir]替换为$redir,那么facebook会使用代码将我正确地重定向到/connect/facebook-check,但我会在那里找到OAuthException: redirect_uri isn't an absolute URI. Check RFC 3986

1 个答案:

答案 0 :(得分:1)

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

Facebook授权基于以下事实:您生成指向FB的链接,用户转到FB并授权自己,然后FB服务器将其重定向回给您(以及是否获得授权)。< / p>

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

附带的教程要求编写一个带有2个方法(输出和返回)的控制器以及配置中的相应条目。

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