API Facebook - FOsUserBundle - 哈希密码

问题描述:

我使用FOSUserBundle和Facebook API。我想让我的用户使用此API在我的网站上注册。然后我希望他们可以登录到我的网站。API Facebook - FOsUserBundle - 哈希密码

我不知道我怎么可以做自动生成的密码的哈希来匹配FOSUserBundle。

我已经在互联网上找到这下代码,我不明白我怎么能与FOSUserBundle匹配这个...提前

如果sombebody能帮助我...谢谢,我的英语水平很抱歉。

/** 
* Loading and ad-hoc creation of a user by an OAuth sign-in provider account. 
* 
* @author F* Kiss <[email protected]> 
*/ 

class UserProvider extends FOSUBUserProvider{ 

/** 
* {@inheritDoc} 
*/ 
public function loadUserByOAuthUserResponse(UserResponseInterface $response){ 

    try { 
     return parent::loadUserByOAuthUserResponse($response); 
    } catch (UsernameNotFoundException $e) { 
     if (null === $user = $this->userManager->findUserByEmail($response->getEmail())) { 
      return $this->createUserByOAuthUserResponse($response); 
     } 

     return $this->updateUserByOAuthUserResponse($user, $response); 
    } 
} 

/** 
    * {@inheritDoc} 
    */ 
public function connect(UserInterface $user, UserResponseInterface $response){ 
    $providerName = $response->getResourceOwner()->getName(); 
    $uniqueId = $response->getUsername(); 
    $user->addOAuthAccount($providerName, $uniqueId); 

    $this->userManager->updateUser($user); 
} 

/** 
    * Ad-hoc creation of user 
    * 
    * @param UserResponseInterface $response 
    * 
    * @return User 
    */ 
protected function createUserByOAuthUserResponse(UserResponseInterface $response){ 
    $user = $this->userManager->createUser(); 

    $this->updateUserByOAuthUserResponse($user, $response); 

    // set default values taken from OAuth sign-in provider account 
    if (null !== $email = $response->getEmail()) { 
     $user->setEmail($email); 
    } 

    if (null === $this->userManager->findUserByUsername($response->getNickname())) { 
     $user->setUsername($response->getNickname()); 
    } 

    $user->setUsername(strtolower(str_replace(' ','',$response->getRealName()).''.rand(0,199))); 
    $user->setUsernameCanonical(strtolower(str_replace(' ','',$response->getRealName()).''.rand(0,199))); 
    $user->setEnabled(false); 

    return $user; 
} 

/** 
    * Attach OAuth sign-in provider account to existing user 
    * 
    * @param FOSUserInterface  $user 
    * @param UserResponseInterface $response 
    * 
    * @return FOSUserInterface 
    */ 
protected function updateUserByOAuthUserResponse(FOSUserInterface $user, UserResponseInterface $response){ 
    $providerName = $response->getResourceOwner()->getName(); 
    $providerNameSetter = 'set'.ucfirst($providerName).'Id'; 
    $user->$providerNameSetter($response->getUsername()); 

    if(!$user->getPassword()) { 
     // generate unique token 
     $secret = md5(uniqid(rand(),true)); 
     $user->setPassword($secret); 
    } 

    return $user; 
} 
} 

您可以使用encoder_factory和用户的盐来编码密码。 (我用的容器来获得服务,使用服务为您提供一流的构造函数)

$user = $userManager->createUser(); 
    $encoder = $this->container->get('security.encoder_factory')->getEncoder($user); 
    $user->setPlainPassword(
    $encoder->encodePassword(
     $this->container->get('fos_user.util.token_generator')->generateToken(), 
     $user->getSalt() 
     ) 
    ); 
+0

感谢您的答案,我的答案很抱歉有点晚了,但我没有收到任何通知:(我会尝试你的解决方案:) – Christophe