2015-06-22 5 views
2

Я использую Authlogic в приложении rails для проверки пароля. Я хотел бы убедиться, что пользователь не использует какой-либо из последних 10 используемых паролей. Может ли Authlogic сделать это, или вам нужно что-то рулон?Вы можете проверить ранее используемые пароли (историю паролей) с помощью Authlogic?

+0

Вы можете использовать камень разработать для аутентификации и разработать имеют эти вики [Как: Disallow ранее используемые пароли] (https://github.com/plataformatec/devise/wiki/How-To: -Disallow-ранее используемый-пароли) –

ответ

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

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

  • Нет связанных вопросов^_^