2016-11-17 2 views
1

При чтении https://symfony.com/doc/current/security/custom_provider.html#create-a-user-class/ все примеры, которые я видел, реализуют Symfony\Component\Security\Core\User\UserInterface для класса User. Этот интерфейс определяет метод для солевого поля, но я хочу использовать Bcrypt для алгоритма хэширования.Symfony 3 пользовательский поставщик, использующий Bcrypt

В моем app/config/security.yml файле у меня есть:

encoders: 
    AppBundle\Security\User\WebserviceUser: 
     algorithm: bcrypt 
     cost: 12 

Связанный документ говорит:

Если getSalt() ничего не возвращает, то представленный пароль просто закодированы с использованием алгоритма указывается в безопасности .yml. Если задана соль, создается следующее значение, а затем хешируется ...

Означает ли это, что если я укажу для использования Bcrypt, то мне не нужно поле солей в базе данных пользователей table (поскольку соль находится в той же строке, что и остальная часть пароля при хэшировании с помощью Bcrypt)?

Если это так, то я предполагаю, что могу просто оставить метод getSalt() пустым телом, чтобы не было указано ни одной соли, и алгоритм в security.yml будет использоваться.

Я полагаю, что мои предположения верны? Если это не так, как я могу реализовать пользовательский провайдер с использованием bcrypt для хеш-паролей?

Я использую Symfony 3.1.6

ответ

3

Как указано в Creating your First User:

вам нужно использовать свойство соли ли?

Если вы используете bcrypt, нет. В противном случае, да. Все пароли должны быть хешированы с солью, но bcrypt делает это внутри. Так как этот учебник делает , используйте bcrypt, метод getSalt() в User может только return null (это не используется). Если вы используете другой алгоритм, вам нужно раскомментировать солевые линии в объекте User и добавить свойство сохраненной соли.

Если вы хотите использовать Bcrypt только return null в методе getSalt().

+0

Это действительно помогло мне. Я создаю пользовательский UserProvider и определил свой собственный пользовательский класс, так как я использую базу данных, которую Doctrine не поддерживает. Оба, казалось, ожидали, что у меня соль отдельно от моего хешированного пароля. –

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