我使用以下方法安装了FOSUserBundle和FOSFacebookBundle:How to make a separate url for signin via Facebook using FOSFacebookBundle in Symfony2。实际上,我并不真正理解整个安全问题的过程,但它现在工作得很好。
当有人使用facebook注册时,我希望在注册之前可以选择用户名(而不是facebook id作为用户名)……我所做的是,我向facebook登录路由发送了一个POST参数,但是我找不到正在处理注册的控制器。
最好的实践是什么?我应该在哪里检索用户名( POST参数)并设置它?
以下是我在security.yml中的配置:
firewalls:
public:
pattern: ^/
fos_facebook:
app_url: "http://www.appName.com"
server_url: "http://local.appName.com/app_dev.php/"
login_path: /login
check_path: /login_check/facebook
provider: appName.facebook.provider
form_login:
login_path: /login
check_path: /login_check/form
provider: fos_userbundle
csrf_provider: form.csrf_provider 这是我用来注册facebook的路径:
_security_check_facebook:
pattern: /login_check/facebook发布于 2012-03-16 05:16:36
没有控制器处理身份验证,任何身份验证方法都会添加一个将在check_path上触发的侦听器,然后执行此操作。
身份验证过程不应负责添加自定义用户数据。如果您遵循FOSFacebookBundle文档,您应该有一个自定义用户提供程序,将用户存储在数据库中,这可能会有点混乱,但这不是一个注册步骤,而是一个身份验证步骤。添加用户名与编辑配置文件非常相似。
为了帮助你,我应该看看你的实现(你如何发送post参数?)但是你可以试着这样做:
添加用户名<代码>G29
这可能行得通,但我从来没有做过这样的事情。
发布于 2013-10-08 19:28:41
这是个老问题,但我当时正在研究一个类似的问题。我想在用户第一次连接到Facebook时为他们添加一个角色。
如果你遵循FOSFacebookBundle文档中的these步骤,那么你可以进入Facebook连接用户的“注册”,看看FacebookProvider类。
在loadUserByUsername方法中有这一部分:
if (!empty($fbdata)) {
if (empty($user)) {
$user = $this->userManager->createUser();
$user->setEnabled(true);
$user->setPassword('');
}
$user->setFBData($fbdata);
...在if内的setPassword之后是我为用户添加角色的位置。
对于您最初选择用户名的问题...注意,对setFBData的调用
在用户实体中,该方法如下所示:
public function setFBData($fbdata)
{
if (isset($fbdata['id'])) {
$this->setFacebookId($fbdata['id']);
$this->addRole('ROLE_FACEBOOK');
}
if (isset($fbdata['first_name'])) {
$this->setFirstname($fbdata['first_name']);
}
if (isset($fbdata['last_name'])) {
$this->setLastname($fbdata['last_name']);
}
if (isset($fbdata['email'])) {
$this->setEmail($fbdata['email']);
}
}setFacebookId()看起来像这样:
public function setFacebookId($facebookId)
{
$this->facebookId = $facebookId;
$this->setUsername($facebookId);
}这就是用户名的来源。我猜这是一个流,您可以将选择的用户名插入并设置它,而不是$facebookId。
发布于 2014-05-16 08:14:29
为此,我采用了另一种方法。我使用了GraphAPI。
public function setFacebookId($facebookId)
{
$this->facebookId = $facebookId;
$username = json_decode(file_get_contents('http://graph.facebook.com/'.$this->facebookId))->username;
$this->setUsername($username);
}它使用Facebook用户名,一个唯一的用户名。
https://stackoverflow.com/questions/9469301
复制相似问题