2015-10-19 2 views
0

Я использую FOSUserBundle и API Facebook. Я хочу, чтобы мои пользователи регистрировались на моем сайте с помощью этого API. Затем я хочу, чтобы они могли войти на мой сайт.API Facebook - FOsUserBundle - Хеш-пароль

Я не знаю, как я мог бы сделать хэш пароля, который автоматически сгенерирован, чтобы соответствовать FOSUserBundle.

Я нашел следующий код на интернет, и я не понимаю, как я могу соответствовать этому с FOSUserBundle ...

Если sombebody могли бы мне помочь ... Спасибо заранее и извините за мой английский.

/** 
* Loading and ad-hoc creation of a user by an OAuth sign-in provider account. 
* 
* @author Fabian 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; 
} 
} 

ответ

0

Вы можете кодировать пароль с помощью encoder_factory и соли пользователя. (я использовал контейнер, чтобы получить услуги, услуги использования в ваш конструктор класса 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() 
     ) 
    ); 
+0

Спасибо за ваш ответ, я так жаль, что ответ немного поздно, но я не получил какой-либо уведомления: (я попробую ваше решение :) – Christophe

Смежные вопросы