grom / facebook-service-provider
Facebook API and connect integration into your Silex applications
Installs: 1 400
Dependents: 0
Suggesters: 0
Security: 0
Stars: 24
Watchers: 2
Forks: 6
Open Issues: 1
Requires
- friendsofsymfony/facebook-bundle: ~1.1
- silex/silex: ~1.0
Requires (Dev)
- symfony/browser-kit: >=2.1.0
This package is not auto-updated.
Last update: 2022-02-01 12:23:42 UTC
README
The FacebookServiceProvider adds Facebook Connect and API to your applications.
It integrates FOSFacebookBundle into Silex.
Parameters
- facebook.config: Configuration of your Facebook application. (appId, secret, fileUpload, )
- facebook.permissions: List of permissions required to connect.
- facebook.session_prefix: Prefix for Facebook data.
Services
- facebook: Facebook SDK. Read online documentation
Installation
Using composer :
composer require grom/facebook-service-provider
Registering
First, you must register the SecurityServiceProvider.
use Silex\Provider\FacebookServiceProvider; $app->register(new FacebookServiceProvider(), array( 'facebook.config' => array( 'appId' => 'YOUR_APP_ID', 'secret' => 'YOUR_APP_SECRET', 'fileUpload' => false, // optional ), 'facebook.permissions' => array('email'), ));
Authentication
To authenticate users with Facebook Connect, first you need to register the SecurityServiceProvider.
To enable Facebook authentication, just add a "facebook" option to your firewall configuration.
$app['security.firewalls'] = array( 'private' => array( 'pattern' => '^/', 'facebook' => array( 'check_path' => '/login_check', 'login_path' => '/login', ), // Users are identified by their Facebook UID 'users' => array( // This is Mark Zuckerberg '4' => array('ROLE_USER', null), ), ), );
If you don't set a login_path
, the user is redirected to Facebook.
Developers of embedded Facebook Applications may define app_url
,
server_url
and display
options.
Defining a custom User Provider and automatic user creation##
The UserProvider used to find Facebook user is similar to the username/password UserProvider. The differences are that users are identified by their Facebook UID instead of their username.
If the Facebook UID is not found in your database, the user provider
can create the user automatically. You simply have to implements the
method FOS\FacebookBundle\Security\User\UserProviderInterface::createUserFromUid
use FOS\FacebookBundle\Security\User\UserManagerInterface as FacebookUserProviderInterface; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\User; use Symfony\Component\Security\Core\Exception\UnsupportedUserException; use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; use Doctrine\DBAL\Connection; class FacebookUserProvider implements FacebookUserProviderInterface { private $conn; public function __construct(Connection $conn) { $this->conn = $conn; } public function loadUserByUsername($uid) { $stmt = $this->conn->executeQuery('SELECT * FROM users WHERE username = ?', array($uid)); if (!$user = $stmt->fetch()) { throw new UsernameNotFoundException(sprintf('Facebook UID "%s" does not exist.', $uid)); } return new User($user['username'], null, explode(',', $user['roles']), true, true, true, true); } public function refreshUser(UserInterface $user) { if (!$user instanceof User) { throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user))); } return $this->loadUserByUsername($user->getUsername()); } public function createUserFromUid($uid) { $this->conn->insert('users', array( 'username' => $uid, 'roles' => 'ROLE_USER', )); return $this->loadUserByUsername($uid); } public function supportsClass($class) { return $class === 'Symfony\Component\Security\Core\User\User'; } }
Now use your custom user provider.
$app['security.firewalls'] = array( 'default' => array( 'facebook' => array( ), 'users' => $app->share(function () use ($app) { return new FacebookUserProvider($app['db']); }), ), );
Facebook Graph API
Once a user is authenticated with Facebook, you can make Facebook Graph API requests.
$app->get('/', function () use ($app) { $user = $app['facebook']->api('/me'); return 'Welcome ' . $user['name']; });
Look at the Facebook Graph Explorer.