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

Ite*_*tor 9 php facebook oauth symfony symfony-3.2

我想按照本教程在我的网站上添加facebook登录选项.我做了教程中的所有内容,但我仍然收到此错误:

OAuthException: redirect_uri isn't an absolute URI
Run Code Online (Sandbox Code Playgroud)

怎么可能解决它?

这个网址是由网址生成的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);
Run Code Online (Sandbox Code Playgroud)

它重定向到此网址:

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=...
Run Code Online (Sandbox Code Playgroud)

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=...
Run Code Online (Sandbox Code Playgroud)

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

Redir定义为:

$redir = $this->generateUrl('connect_facebook_check', array(), UrlGeneratorInterface::ABSOLUTE_URL);
Run Code Online (Sandbox Code Playgroud)

EDIT2

如果我替换[$redir]$redir然后facebook /connect/facebook-check使用代码正确地重定向我,但我得到了一个OAuthException: redirect_uri isn't an absolute URI. Check RFC 3986.

bat*_*to3 1

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

Facebook授权是基于这样的事实:你生成FB的链接,用户去FB并授权自己,然后FB服务器将其重定向回你(以及是否授权)。

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

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

如果您使用,请查看您如何配置提供程序。里面是什么redirectUri