API Facebook - FOsUserBundle -哈希密码


API Facebook - FOsUserBundle - Hash password

我使用FOSUserBundle和Facebook API。我想让我的用户在我的网站上注册这个API。然后我希望他们可以登录到我的网站。

我不知道如何做密码的哈希,它是自动生成的,以匹配FOSUserBundle。

我在网上找到了这个下一个代码,我不明白我怎么能把它与FOSUserBundle匹配…

如果有人能帮我…提前感谢,很抱歉我的英语。

/**
* Loading and ad-hoc creation of a user by an OAuth sign-in provider account.
*
* @author Fabian Kiss <fabian.kiss@ymc.ch>
*/
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的salt对密码进行编码。(我使用容器来获取服务,在你的Provider类的构造函数中使用服务)

    $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()
       )
    );