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, чтобы получить пройденные роли из ответа.

Другие вопросы по тегам