Symfony2从登录响应中获取角色

时间:2015-04-28 14:22:32

标签: symfony response roles hwioauthbundle

在我的Symfony2项目中,我使用HwiOAuthbundle登录使用Salesforce个用户的用户,并在user provider我获取有关该用户的信息:{ {1}},...等我想知道我是如何直接从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

1 个答案:

答案 0 :(得分:0)

通常它的工作原理如下:

$token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
$this->container->get('security.context')->setToken($token); 

因此,在您从响应中获取用户名后,您将获得/创建新用户,然后您将获得他的角色$ user-> getRoles();

你有什么安全性。作为

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,看看没有与角色相关的任何字段。

所以我想你需要通过查看“Salesforce”api来制作自己的自定义解决方案,并检查是否可以传递用户角色。然后,如果可以通过,则需要扩展Hwi以从响应中获取传递的角色

相关问题