Я использую Authlogic в приложении rails для проверки пароля. Я хотел бы убедиться, что пользователь не использует какой-либо из последних 10 используемых паролей. Может ли Authlogic сделать это, или вам нужно что-то рулон?Вы можете проверить ранее используемые пароли (историю паролей) с помощью Authlogic?
2
A
ответ
1
Чтобы убедиться, что ваши потребители не повторять пароли вы будете нуждаться в истории паролей
$ rails g migration CreatePasswordHistory
class CreatePasswordHistories < ActiveRecord::Migration
def self.change
create_table(:password_histories) do |t|
t.integer :user_id
t.string :encrypted_password
t.timestamps
end
end
end
Теперь вы можете обновить модель пользователей, чтобы сохранить пароль для пароля Истории модели что-то вроде:
class AdminUser < ActiveRecord::Base
include ActiveModel::Validations
has_many :password_histories
after_save :store_digest
validates :password, :unique_password => true
...
private
def save_password_history
if encrypted_password_changed?
PasswordHistory.create(:user => self, :encrypted_password => encrypted_password)
end
end
end
Наконец создать модель под названием unique_password_validator
require 'bcrypt'
class UniquePasswordValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.password_histories.each do |password_history|
bcrypt = ::BCrypt::Password.new(password_history.encrypted_password)
hashed_value = ::BCrypt::Engine.hash_secret(value, bcrypt.salt)
record.errors[attribute] << "has been used previously." and return if hashed_value == password_history.encrypted_password
end
end
end
Надеется, что это помогает Happy Hacking
Вы можете использовать камень разработать для аутентификации и разработать имеют эти вики [Как: Disallow ранее используемые пароли] (https://github.com/plataformatec/devise/wiki/How-To: -Disallow-ранее используемый-пароли) –