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



我想按照本教程将Facebook登录选项添加到我的网站。我按照教程中的内容做了所有操作,但仍然收到此错误:

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确实不是绝对的URL。但是如何解决它呢?


编辑

如果我添加'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

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

Facebook授权是基于这样一个事实,即您生成指向FB的链接,用户转到FB并授权自己,然后FB服务器将其重定向回您(以及它是否被授权(。

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

随附的教程要求在配置中编写具有 2 种方法(输出和返回(和相应条目的控制器。

如果使用它,请查看如何配置提供程序。redirectUri有什么?

最新更新