34 votes

Authentification Facebook + UserBundle avec symfony2

J'essaie d'authentifier mes utilisateurs via facebook ou userbundle sur symfony2.

Voici ce que j'ai fait jusqu'à présent (et cela fonctionne, bien que pas comme je le souhaite) :

firewalls:
    main:
        pattern: .*
        fos_facebook:
            app_url: "http://apps.facebook.com/appName/"
            server_url: "http://localhost/facebookApp/"
            login_path: /fblogin
            check_path: /fblogin_check
            default_target_path: /
            provider: my_fos_facebook_provider
        form_login:
            check_path: /login_check
        anonymous: true
        logout:
            handlers: ["fos_facebook.logout_handler"]

Le problème avec cette configuration est que lorsque l'utilisateur n'est pas connecté, il est redirigé vers /login (form_login), alors que je voudrais qu'il soit redirigé vers l'authentification Facebook par défaut.

J'ai déjà essayé de supprimer simplement le form_login, mais si j'accède à /login (qui est la façon dont je veux que les utilisateurs se connectent en dehors de facebook), il ne connaît pas la route /login_check pour soumettre le formulaire de connexion.

Peut-être que chain_provider serait une solution ? Je n'ai pas réussi à la faire fonctionner non plus

1voto

Silence Points 151

Une option facile et peut-être plus utilisable serait d'afficher toutes les options de connexion dans la page de connexion (y compris facebook, twitter, open id, ou tout ce que vous souhaitez utiliser).

1voto

jfcartier Points 387

Les fournisseurs de chaînes sont en effet la solution à ce problème. Voici à quoi devrait ressembler votre configuration security.yml :

providers:
  my_project.chain_provider:
    chain:
      providers: [fos_userbundle, my_project.facebook_provider]
  fos_userbundle:
    id: fos_user.user_provider.username_email
  my_project.facebook_provider:
    id: my_project.user_provider.facebook

Et, bien sûr, vous devez définir votre propre fournisseur de facebook comme indiqué ici

0voto

Gunther Konig Points 133

Vous devez ajouter le fournisseur fos_userbundle pour le form_login (et conserver le reste de la configuration) :

form_login:
    provider: fos_userbundle

Je n'ai pas trop creusé, mais je pense que Symfony2 crée automatiquement un fournisseur chaîné dans ce cas.

0voto

Vous pouvez également écrire votre écouteur d'événements où vous chercherez à savoir si un utilisateur se rend directement au formulaire /login ou s'il est redirigé.

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