Symfony 4 FOSUser - установите пароль для регистрации в Google / Facebook - PullRequest
0 голосов
/ 13 марта 2019

У меня работает FOSUser, и сейчас я пытаюсь добавить регистрацию в Google / Facebook, что означает, что я все равно буду регистрировать пользователей с обычной настройкой FOSUser.

Я знаю о HWIOAuthBundle, но я не хочу добавлять другой пакет. У меня уже есть мысли о самом FOS-пакете после того, как я уже переписал.

При создании пользователя с информацией, поступающей из Google, я, конечно, получаю сообщение об ошибке, что поле пароля не может быть пустым.

Это функция создания пользователя в моем контроллере:

private function registerUser($payload) {
    $user = $this->userManager->createUser();
    $user->setEmail($payload['email']);
    $user->setUsername($payload['given_name'] . '-' . mt_rand()); // temporary username
    $this->userManager->updateUser($user);
}

Глядя на этот вопрос SO , я добавил поле пароля к моей измененной сущности пользователя, но Doctrine: миграция не улавливает его:

/**
* @ORM\Entity
* @ORM\Table(name="`user`")
*/
class User extends BaseUser
{
 .....
/**
 * @ORM\Column(type="string", name="password", nullable=true)
*/
protected $password;

Возможно, я иду по неверному пути, и в этом случае я ценю любые указания.

1 Ответ

0 голосов
/ 13 марта 2019

У меня есть логин с вопросом / Oauth. Я просто установил случайный пароль. Они не могут войти с ним, поскольку я даже не знаю, но они могут сбросить его после подтверждения по электронной почте.

$user = new User();

$user->addRole($xyz->getRoleType());
$user->setUsername($xyz->getUsername());
$user->setEmail($xyz->getEmail());

// encode a random password, manually
$plainPassword   = base64_encode(random_bytes(16));
$encodedPassword = $this->get('security.password_encoder')
    ->encodePassword($user, $plainPassword);
$user->setPassword($encodedPassword);

$user->setEnabled(true);    // we have to enable the user to let them login again
$em->persist($user);
...