grom / facebook-service-provider
该包已被废弃,不再维护。未建议替代包。
将Facebook API和connect集成到您的Silex应用中
v1.1.0
2014-03-08 21:19 UTC
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
FacebookServiceProvider将Facebook Connect和API添加到您的应用中。
它将FOSFacebookBundle集成到Silex中。
参数
- facebook.config: 您Facebook应用的配置。(appId, secret, fileUpload,)
- facebook.permissions: 连接所需的权限列表。
- facebook.session_prefix: Facebook数据的前缀。
服务
- facebook: Facebook SDK。在线文档
安装
使用composer
composer require grom/facebook-service-provider
注册
首先,您必须注册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'), ));
认证
要使用Facebook Connect认证用户,首先需要注册SecurityServiceProvider。
要启用Facebook认证,只需将“facebook”选项添加到您的防火墙配置中。
$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), ), ), );
如果您没有设置login_path
,则用户将被重定向到Facebook。
嵌入式Facebook应用的开发者可以定义app_url
、server_url
和display
选项。
定义自定义用户提供者和自动用户创建
用于查找Facebook用户的UserProvider类似于username/password UserProvider。不同之处在于用户通过Facebook UID而不是用户名进行标识。
如果Facebook UID在您的数据库中找不到,用户提供者可以自动创建用户。您只需实现方法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'; } }
现在使用您的自定义用户提供者。
$app['security.firewalls'] = array( 'default' => array( 'facebook' => array( ), 'users' => $app->share(function () use ($app) { return new FacebookUserProvider($app['db']); }), ), );
Facebook Graph API
一旦用户通过Facebook认证,您就可以进行Facebook Graph API请求。
$app->get('/', function () use ($app) { $user = $app['facebook']->api('/me'); return 'Welcome ' . $user['name']; });