在我的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
答案 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以从响应中获取传递的角色