0

所以我使用带有 LDAP 的 FOSUserBundle 作为我的身份验证方法,我想知道是否有办法删除/忽略passwordFOSUser我的实体的字段?

我意识到删除可能并不理想(以防它与内部逻辑混淆),但该列从未使用过,当我从固定装置创建时我被迫填充它FOSUsers

$user = new FOSUser();

$user->setDn($item["dn"]);
$user->setEnabled(1);
$user->setUsername($item["samaccountname"][0]);
$user->setUsernameCanonical(strtolower($item["samaccountname"][0]));
$user->setEmail($item["mail"][0]);
$user->setEmailCanonical(strtolower($item["mail"][0]));
$user->setDepartment($ldap_groups[$matches[1]]);
$user->setDepartmentDn($group);
$user->setPassword('blank'); // Is there away to avoid this?

$manager->persist($user); 
4

2 回答 2

1

您实际上可以删除密码,但您必须保留getPassword()UserInterface 中定义的密码。如果您想保留它,例如当您允许使用多种登录类型时,您将再次需要它。我建议将该字段设置为可为空。如果您正在使用注释,它就像添加nullable=true到列一样简单:

/**
 * @ORM\Column(type="string", name="password", nullable=true)
 */
于 2017-03-30T05:56:24.493 回答
0

因此,覆盖列原则允许继承映射

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 * @ORM\AttributeOverrides({
 *     @ORM\AttributeOverride(name="password",
 *          column=@ORM\Column(
 *              name     = "password",
 *              type     = "string",
 *              nullable=true
 *          )
 *      )
 * })
 */
class FOSUser extends BaseUser implements LdapUserInterface
{
  // Extended logic.
}

密码字段仍位于 中BaseUser,但被@ORM\AttributeOverride注释覆盖。

于 2017-03-30T10:29:48.783 回答