FOSUserBundle игнорирует поле пароля

Поэтому я использую 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);

0

Решение

Вы можете удалить пароль, но вы должны сохранить getPassword() как это определено в UserInterface. В случае, если вы хотите сохранить его, например, когда вы разрешите несколько типов входа, где вам это понадобится снова. Я рекомендую установить поле как обнуляемое. Если вы используете аннотации, это так же просто, как добавление nullable=true в колонку:

/**
* @ORM\Column(type="string", name="password", nullable=true)
*/
1

Другие решения

Таким образом, переопределить доктрину столбца позволяет Карта наследования:

/**
* @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 аннотаций.

0

По вопросам рекламы [email protected]