Symfony2 получает роли из ответа входа
В моем Symfony2
проект я использую HwiOAuthbundle
войти в систему пользователей с Salesforce
пользователи, а по моему user provider
я получаю информацию о пользователе: email, nickname, password
и т. д. И я хочу знать, если я могу получить role
аутентифицированного пользователя непосредственно из response
, это мой код провайдера пользователя:
class UserProvider extends OAuthUserProvider {
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
{
$username = $response->getUsername();
$email = $response->getEmail();
$nickname = $response->getNickname();
$realname = $response->getRealName();
//set data in session
$this->session->set('email', $email);
$this->session->set('nickname', $nickname);
$this->session->set('realname', $realname);
$result = $this->doctrine->getManager()->getRepository('EnvivioUserBundle:User')->findOneBy(array(
'username' => $username,
));
if (!count($result)) {
$user = new User();
$user->setUsername($username);
$user->setRealname($realname);
$user->setNickname($nickname);
$user->setEmail($email);
//Set some wild random pass since its irrelevant, this is Google login
$factory = $this->container->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword(md5(uniqid()), $user->getSalt());
$user->setPassword($password);
$em = $this->doctrine->getManager();
$em->persist($user);
$em->flush();
} else {
$user = $result; /* return User */
}
//set id
$this->session->set('id', $user->getId());
return $this->loadUserByUsername($response->getUsername());
}
я не знаю, смогу ли я получить роли $response
лайк $response->getRoles()
1 ответ
Обычно это работает как:
$token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
$this->container->get('security.context')->setToken($token);
поэтому после получения имени пользователя из ответа вы получаете / создаете нового пользователя, а затем получаете его роли как $user->getRoles();
у вас есть в security.yml imilar как
security:
providers:
main:
entity: { class: MyApp\UserBundle\Entity\User, property: username }
fos_userbundle:
id: fos_user.user_provider.username
если вы используете его с FosUserBundle
ОБНОВЛЕНИЕ: Я был немного смущен "ролями", и, кажется, вы смешиваете понятие "роль" из Symfony и "роль" с внешнего сайта. К сожалению, это не будет работать "из коробки".
Сначала вы можете посмотреть на UserResponseInterface https://github.com/hwi/HWIOAuthBundle/blob/master/OAuth/Response/UserResponseInterface.php и увидеть, что нет никаких полей, связанных с ролями.
Поэтому я полагаю, что вам нужно создать собственное решение, обратившись к API Salesforce и проверив, можно ли передать роль пользователя. Тогда, если это возможно, вам нужно расширить Hwi, чтобы получить пройденные роли из ответа.