Подтвердить что ты не робот

OAuthException: redirect_uri не является абсолютным URI. Проверьте RFC 3986 (Symfony)

Я хотел бы добавить опцию входа в facebook на мой сайт, следуя этому руководству. Я сделал все, как в учебнике, но я все еще получаю эту ошибку:

OAuthException: redirect_uri isn't an absolute URI

Как это можно решить?

Эти URL-адреса генерируются 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);

Он перенаправляет на этот 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-адресом. Но как это можно исправить?


Edit

Если я добавлю 'redirect_uri' => [$redir], тогда url выглядит так:

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 в сгенерированном URL-адресе, но я все равно получаю эту ошибку, если я перехожу к ней

Редир определяется как:

$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.

4b9b3361

Ответ 1

Я не знаю, где вы получили пример кода, но, конечно, не из связанного учебника.

Авторизация Facebook основана на том факте, что вы создаете ссылку на FB, пользователь переходит к FB и авторизуется сам, а затем сервер FB перенаправляет его обратно вам (вместе с тем, разрешен ли он или нет).

FB не угадает, куда перенаправить пользователя после входа в систему. Вам нужно дать ему полный путь с http (s) и именем сервера (и если я правильно помню, он также совместим с сохраненным в приложении FB)

Прилагаемый учебник требует записи контроллера с двумя методами (вывод и возврат) и соответствующими записями в конфигурации.

Если вы используете this, посмотрите, как вы настроили поставщика. Что находится в redirectUri?