Vérifier le mot de passe et créer l'utilisateur manuellement avec FOSUserBundle

J'utilise FOSUserBundle dans mon application. Je voudrais faire deux choses via les services HTTP:

  1. vérifiez le mot de passe. Le service pourrait ressembler à ceci (le mot de passe ne sont pas chiffrés):

    public function checkPasswordValidity($userId, $password) {
        $user = $this->getDoctrine()
            ->getRepository('MyCompanyUserBundleEntityUser')
            ->find($userId);
    
        if (specialFunction($user , $password))
            echo 'Valid Password';
        else
            echo 'Invalid Password';
    }
    
  2. créer un nouvel utilisateur via un autre service HTTP. Les paramètres serait le nom d'utilisateur et le mot de passe.

22
demandé sur oradwell 2012-02-28 13:53:36

3 réponses

  1. Vérifier le mot de passe:

    $encoder_service = $this->get('security.encoder_factory');
    $encoder = $encoder_service->getEncoder($user);
    $encoded_pass = $encoder->encodePassword($password, $user->getSalt());
    
    //then compare    $user->getPassword() and $encoded_pass
    
  2. Créer un nouvel utilisateur:

    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->createUser();
    $user->setUsername($login);
    $user->setPlainPassword($pass);
    ...
    $userManager->updateUser($user);
    
62
répondu user1288434 2013-10-15 21:50:42

Pour moi, fonctionne:

$encoder_service = $this->get('security.encoder_factory');
$encoder = $encoder_service->getEncoder($user);
if ($encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt()) {}

je n'ai pas tester deuxième question, mais je pense que c'est répondu déjà.

6
répondu Tomas 2014-09-11 12:27:16

ajouter manuellement un nouvel utilisateur:

connectez-vous à phpmyadmin , l'accès fos_user_user tableau , cliquez sur insérer > remplissez les champs , nom d'utilisateur , email,rôles, etc.

Générer le sel et le mot de passe à l'aide de ce script php:

<?php 

$salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);

echo "Salt used: " . $salt ."<br/>";

echo "<br/>";

$password = 'adminpasswordhere';
$salted = $password.'{'.$salt.'}';
$digest = hash('sha512', $salted, true);

for ($i=1; $i<5000; $i++) {
    $digest = hash('sha512', $digest.$salted, true);
}

$encodedPassword = base64_encode($digest);

echo "Password used: " . $password ."<br/>";

echo "<br/>";

echo "Encrypted Password: " . $encodedPassword ."<br/>";


?>

Profitez-en !

0
répondu Alin Razvan 2016-12-28 03:42:05