#ruby-on-rails
#ruby-on-rails
Вопрос:
Я новичок в Rails 5, я был бы признателен за вашу помощь.
У меня есть модель пользователя, где, очевидно, сохраните пароль для пользователя для возможного входа в систему.
Дело в том, что я хочу автоматически установить пароль на основе текстового поля с именем identification_number .
Все, что я читал, касается этого с помощью Devise gem, но я его не использую, а также не хочу.
Еще раз спасибо за вашу помощь.
Комментарии:
1. Есть очень веская причина, по которой все, что вы прочитали, касается использования devise. «Я новичок в Rails 5» Это дополнительно подкрепляет его. Вы подвергаете своих пользователей огромному риску.
2. Взгляните на github.com/codahale/bcrypt-ruby
Ответ №1:
Поле пароля — это просто еще одно строковое поле, вызываемое :identification_number
для вашего случая.
Но сохранение пароля в БД в виде простых строк крайне не рекомендуется.
Существует много проблем с безопасностью, если вы сохраняете пароли в виде простых строк в своей базе данных.
Некоторые из них заключаются в том, что:
- У вас есть полный доступ к паролям ваших пользователей
- Если кому-то каким-то образом удастся получить доступ к вашей базе данных, у него также будет полный доступ к паролям ваших пользователей.
Чтобы избежать этих проблем, большинство приложений сохраняют строки паролей в виде зашифрованных строк с добавлением какой-либо соли для повышения энтропии.
С помощью быстрого поиска в Google я нашел несколько соответствующих сообщений в блогах, которые могут помочь вам создать шифрование пароля с нуля, например:
Без использования драгоценного камня: https://www.sitepoint.com/rails-userpassword-authentication-from-scratch-part-i /
Использование некоторых драгоценных камней: http://railscasts.com/episodes/250-authentication-from-scratch?view=asciicast
Кроме того, пароль не является identification_number . Я бы не стал использовать это имя. Пароль не используется для идентификации пользователя. В id
большинстве случаев это идентификационный номер. Лучше просто вызвать его :password
. Кроме того, это не обязательно должно быть текстовое поле, оно не должно быть таким длинным.
Комментарии:
1. Я использую bcrypt, но чего я действительно хочу, так это пропустить текстовое поле для пароля и хочу установить его равным текстовому полю identification_number .
2. Извините, я не совсем понял, что вы пытаетесь сделать.
Ответ №2:
Вы можете использовать драгоценный камень bcrypt для реализации безопасного пароля.
Рубиновый камень bcrypt предоставляет вам метод has_secure_password. Метод has_secure_password шифрует пароли путем хэширования и соления паролей и генерирует ‘password_digest’.
вы можете обратиться к этой ссылке для получения дополнительной информации