Поэтому я использую FOSUserBundle с LDAP в качестве метода аутентификации, и мне интересно, есть ли способ удалить / игнорировать password
поле для моего FOSUser
юридическое лицо?
Я понимаю, что удаление может быть не идеальным (в случае, если оно портится внутренней логикой), но столбец никогда не используется, и я вынужден заполнить его при создании 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);
Вы можете удалить пароль, но вы должны сохранить getPassword()
как это определено в UserInterface. В случае, если вы хотите сохранить его, например, когда вы разрешите несколько типов входа, где вам это понадобится снова. Я рекомендую установить поле как обнуляемое. Если вы используете аннотации, это так же просто, как добавление nullable=true
в колонку:
/**
* @ORM\Column(type="string", name="password", nullable=true)
*/
Таким образом, переопределить доктрину столбца позволяет Карта наследования:
/**
* @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
аннотаций.