В целом это выглядит довольно неплохо.
- Вы разрешаете знаки '+' в адресах электронной почты
- Вы разрешаете смешанный регистр адресов электронной почты.
Вот связанный вопрос о проверке адресов электронной почты на основе регулярных выражений.
Единственное, что мне кажется вопиющим, это то, что похоже, что вы храните парольв текстовом виде, вместо того, чтобы хранить его в зашифрованном виде, и вы не проверяете, что подтверждение пароля совпадает с паролем.
Вот пара строк из проекта, в котором у нас были довольно ограничительные правила для паролей.Возможно, вы захотите адаптировать их.
validates_presence_of :password, :if => :password_required?
validates_confirmation_of :password, :if => :password_required?, :message => "Your password and confirmation must match."
validates_format_of :password, :with => /^[\S]{4,}$/, :message => "Your password must be at least 4 characters and contain no spaces or tabs.", :if => :password_required?
def password_required?
self.new_record?
end
Использование password_required?
в своем собственном методе дает вам больше гибкости при указании обстоятельств, в которых вы хотите выполнить проверку.
Относительно хранения паролейзашифрованный, я использовал для этого хэши SHA-1.По сути, вы сохраняете хэш пароля SHA-1, затем, когда они аутентифицируются, вы сравниваете хэш SHA-1 пароля, который они вводят, с сохраненным хешем.Таким образом, пароль не сохраняется в виде открытого текста.Вот фрагмент кода:
# Encrypts some data with the salt.
def self.encrypt(password, salt)
Digest::SHA1.hexdigest("--#{salt}--#{password}--")
end
# Encrypts the password with the user salt
def encrypt(password)
self.class.encrypt(password, salt)
end
Эти настройки позволяют использовать методы User.encrypt(password, salt)
и user.encrypt(password)
.Используйте метод уровня класса для создания зашифрованной версии того, что кто-то вводит при входе в систему, и используйте метод уровня объекта при сохранении чьего-либо пароля.Я пропустил некоторые части, но, по крайней мере, это дает вам возможность подумать.
Примечание: Вот больше информации о хэшах SHA-1 , чем вам когда-либо понадобится.