首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSFacebookBundle :注册前选择用户名

FOSFacebookBundle :注册前选择用户名
EN

Stack Overflow用户
提问于 2012-02-28 01:23:18
回答 3查看 938关注 0票数 1

我使用以下方法安装了FOSUserBundle和FOSFacebookBundle:How to make a separate url for signin via Facebook using FOSFacebookBundle in Symfony2。实际上,我并不真正理解整个安全问题的过程,但它现在工作得很好。

当有人使用facebook注册时,我希望在注册之前可以选择用户名(而不是facebook id作为用户名)……我所做的是,我向facebook登录路由发送了一个POST参数,但是我找不到正在处理注册的控制器。

最好的实践是什么?我应该在哪里检索用户名( POST参数)并设置它?

以下是我在security.yml中的配置:

代码语言:javascript
复制
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的路径:

代码语言:javascript
复制
_security_check_facebook:
    pattern: /login_check/facebook
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-16 05:16:36

没有控制器处理身份验证,任何身份验证方法都会添加一个将在check_path上触发的侦听器,然后执行此操作。

身份验证过程不应负责添加自定义用户数据。如果您遵循FOSFacebookBundle文档,您应该有一个自定义用户提供程序,将用户存储在数据库中,这可能会有点混乱,但这不是一个注册步骤,而是一个身份验证步骤。添加用户名与编辑配置文件非常相似。

为了帮助你,我应该看看你的实现(你如何发送post参数?)但是你可以试着这样做:

  1. 将post参数发送到自定义控制器(由您实现)
  2. 临时存储用户名(可能是用户会话数据?)
  3. 触发身份验证过程(这取决于您的实现,但本质上我们讨论的是在facebook上进行身份验证,然后发布到login_check路径)
  4. 在经过身份验证的用户

添加用户名<代码>G29

这可能行得通,但我从来没有做过这样的事情。

票数 2
EN

Stack Overflow用户

发布于 2013-10-08 19:28:41

这是个老问题,但我当时正在研究一个类似的问题。我想在用户第一次连接到Facebook时为他们添加一个角色。

如果你遵循FOSFacebookBundle文档中的these步骤,那么你可以进入Facebook连接用户的“注册”,看看FacebookProvider类。

loadUserByUsername方法中有这一部分:

代码语言:javascript
复制
if (!empty($fbdata)) {
    if (empty($user)) {
        $user = $this->userManager->createUser();
        $user->setEnabled(true);
        $user->setPassword('');
    }

    $user->setFBData($fbdata);
    ...

在if内的setPassword之后是我为用户添加角色的位置。

对于您最初选择用户名的问题...注意,对setFBData的调用

在用户实体中,该方法如下所示:

代码语言:javascript
复制
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()看起来像这样:

代码语言:javascript
复制
public function setFacebookId($facebookId)
{
    $this->facebookId = $facebookId;
    $this->setUsername($facebookId);
}

这就是用户名的来源。我猜这是一个流,您可以将选择的用户名插入并设置它,而不是$facebookId

票数 1
EN

Stack Overflow用户

发布于 2014-05-16 08:14:29

为此,我采用了另一种方法。我使用了GraphAPI。

代码语言:javascript
复制
public function setFacebookId($facebookId)
{
    $this->facebookId = $facebookId;
    $username = json_decode(file_get_contents('http://graph.facebook.com/'.$this->facebookId))->username;
    $this->setUsername($username);
}

它使用Facebook用户名,一个唯一的用户名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9469301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档