9 votes

OAuthException : redirect_uri n'est pas un URI absolu. Consultez la RFC 3986 (Symfony)

J'aimerais ajouter l'option de connexion à Facebook à mon site web. ce tutoriel . J'ai tout fait comme dans le tutoriel, mais j'obtiens toujours cette erreur :

OAuthException: redirect_uri isn't an absolute URI

Comment peut-on résoudre ce problème ?

Ces urls sont générées par la fonction facebookOAuthProvider . Le site web n'est pas sur localhost. Il fonctionne sur un serveur web, avec https.

Voici le code correspondant :

    // 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);

Il redirige vers cette 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=...

En redirect_uri n'est en effet pas une url absolue. Mais comment est-il possible d'y remédier ?


Editer

Si j'ajoute 'redirect_uri' => [$redir] l'url ressemble alors à ceci :

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

Je peux voir l'absolue redirect_uri dans l'url générée, mais j'obtiens toujours cette erreur, si je navigue vers elle

Le redir est défini comme suit :

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

Edit2

Si je remplace [$redir] con $redir puis facebook me redirige correctement vers /connect/facebook-check avec un code, mais j'obtiens un OAuthException: redirect_uri isn't an absolute URI. Check RFC 3986 là.

1voto

bato3 Points 850

Je ne sais pas où vous avez trouvé le code de l'exemple, mais certainement pas dans le tutoriel lié.

L'autorisation de Facebook est basée sur le fait que vous créez un lien vers FB, que l'utilisateur va sur FB et s'autorise, et que le serveur de FB le redirige vers vous (en indiquant s'il est autorisé ou non).

FB ne sait pas où rediriger l'utilisateur après la connexion. Vous devez lui donner un chemin complet avec http(s) et le nom du serveur (et si je me souviens bien, c'est aussi compatible avec ce qui est sauvegardé dans l'application FB).

Le tutoriel ci-joint demande d'écrire un contrôleur avec 2 méthodes (output et return) et les entrées correspondantes dans la configuration.

Si vous utilisez cette Ensuite, vous verrez comment vous avez configuré le fournisseur d'accès. Ce qui est dans redirectUri ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X