0

无论如何我可以使用对象内的 salt 属性从数据库加载用户吗?

我正在使用与 FOSFacebookBundle 集成的 FOSUserBundle。

我要求进行一项修改,让用户使用 Facebook 登录,如果他的电子邮件已经注册,他会将 facebookId 绑定到该现有帐户。

问题是,当updateUser()调用该方法时,密码会更新,用户永远无法再次使用他的用户名和密码登录。

那时我需要以某种方式保留密码。我正在考虑再次设置用户的旧盐和实际的散列密码,但用户实体没有加载盐或纯密码,只有散列密码。

4

1 回答 1

1

显然,该方法内部存在错误setFacebookId

/**
 * @param string $facebookId
 * @return void
 */
public function setFacebookId($facebookId)
{
    $this->facebookId = $facebookId;
    $this->salt = '';

    if(empty($this->username)) {
        $this->setUsername($facebookId);
    }
}

盐被覆盖了。删除该行实际上可以解决问题:

/**
 * @param string $facebookId
 * @return void
 */
public function setFacebookId($facebookId)
{
    $this->facebookId = $facebookId;

    if(empty($this->username)) {
        $this->setUsername($facebookId);
    }
}
于 2013-04-28T03:06:04.830 回答