Home » Php » php – Facebook + UserBundle authentication with symfony2

php – Facebook + UserBundle authentication with symfony2

Posted by: admin April 23, 2020 Leave a comment

Questions:

I’m trying to authenticate my users via facebook or userbundle on symfony2

Here’s what I did so far (and it works, although not as I want):

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"]

The problem with that config is that when the user is not logged in, he’s redirected to /login (form_login), while I’d like him to be redirected to Facebook authentication by default

I already tried simply removing the form_login, but then if I access /login (which is how I want users to login outside facebook), it doesn’t know the /login_check route to submit the login form

Maybe chain_provider would be a solution? I didn’t get it working either

How to&Answers:

An easy and mabye more usable option would be to show all the login options in the login page (including facebook, twitter, open id, or whatever you’d like to use)

Answer:

Chain providers is indeed the solution to this problem. Here is what you security.yml config shoud look like:

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

And, of course, you need to define your own facebook provider as stated here

Answer:

You should add the fos_userbundle provider for the form_login (and keep the rest of the configuration):

form_login:
    provider: fos_userbundle

I didn’t dig too much, but I think Symfony2 is automatically creating a chained provider in this case.

Answer:

Also you can write your event listener where you will be looking whether a user goes to /login form directly or by redirecting.