Я добавляю пользователя в базу данных.
Я кодирую их пароль, используя шифрование bcrypt:
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword($user->getPassword(),$user->getSalt());
$postData->setPassword($password);
Все это сохраняется в базе данных просто отлично.
В моем User Entity мой метод getSalt () возвращает null:
public function getSalt(){
return null;
}
Теперь, когда я пытаюсь аутентифицироваться, логи Symfony сообщают мне, что я ввел неверные учетные данные.
Тем не мение…
Если я использую этот сайт для шифрования моего пароля с помощью bcrypt:
http://bcrypthashgenerator.apphb.com/
Затем введите результат в базу данных вручную и попытайтесь подтвердить подлинность с помощью пароля пользователя, который я обновил, используя результаты по приведенной выше ссылке,
Работает нормально.
Таким образом, есть кое-что, что я не установил: когда я шифрую пароль, Symfony не может аутентифицироваться против него.
Я попытался установить соль на getSalt (), установив его в пустую строку.
РЕДАКТИРОВАТЬ
Я использую php 5.5.9
Я также пытался использовать класс BCryptPasswordEncoder ($ cost),
установка стоимости на __construct такая же, как и в моем security.yml
и это все еще не подтверждает подлинность.
РЕДАКТИРОВАТЬ
Я также попытался установить этот класс через композитор, как предложено Вот.
РЕДАКТИРОВАТЬ
Если я использую метод php:
password_hash('testertester',PASSWORD_BCRYPT,array('cost'=>13));
Это подтверждает подлинность отлично.
Так что в Symfony есть чем заняться. Я буду продолжать копать.
Все равно не повезло: — /
Я пока безрезультатно слежу за интернетом.
Любая помощь будет принята с благодарностью.
Объявление
Я передавал в существующий объект сущности не представленный объект данных !!
$postData = $form->getdata();
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword($user->getPassword(),$user->getSalt());
$postData->setPassword($password);
Обратите внимание на эту строку здесь:
$ user-> getPassword () должен быть $ postData-> getPassword ()
$password = $encoder->encodePassword($postData->getPassword(),$user->getSalt());
Вы живете и учитесь!
Других решений пока нет …