Проверьте пароль и создайте пользователя вручную с помощью FOSUserBundle

Я использую FOSUserBundle в своем приложении. Я хотел бы сделать две вещи через службы HTTP:

  1. Проверить пароль. Сервис может выглядеть так (пароль не будет зашифрован):

    public function checkPasswordValidity($userId, $password) {
        $user = $this->getDoctrine()
            ->getRepository('MyCompany\UserBundle\Entity\User')
            ->find($userId);
    
        if (specialFunction($user , $password))
            echo 'Valid Password';
        else
            echo 'Invalid Password';
    }
    
  2. Создайте нового пользователя через другую службу HTTP. Параметрами будут имя пользователя и пароль.


person Jade Jaber    schedule 28.02.2012    source источник


Ответы (3)


  1. Проверить пароль:

    $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. Создайте нового пользователя:

    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->createUser();
    $user->setUsername($login);
    $user->setPlainPassword($pass);
    ...
    $userManager->updateUser($user);
    
person user1288434    schedule 23.03.2012
comment
Это не сработало для меня. Зашифрованный пароль и пароль в базе были разными. - person Michael Cole; 13.06.2014
comment
Вы работаете с одним и тем же энкодером?, вы должны проверить свой config.yml - person ; 16.01.2017
comment
Полную документацию по UserManager FOS можно найти по адресу symfony.com/doc/current/ пакеты/FOSUserBundle/user_manager.html - person David Baucum; 31.01.2017

Для меня работает:

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

Я не проверял второй вопрос, но думаю, что на него уже отвечено.

person Tomas    schedule 11.09.2014

Вручную добавить нового пользователя:

Войдите в phpmyadmin, откройте таблицу fos_user_user, нажмите «Вставить» > заполните поля, имя пользователя, адрес электронной почты, роли и т. д.

Сгенерируйте соль и пароль, используя этот 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/>";


?>

Наслаждаться !

person Alin Razvan    schedule 28.12.2016