Ruby on Rails 5.2 - ActiveModel::SecurePassword::ClassMethods

मॉड्यूल ActiveModel :: SecurePassword :: ClassMethods




ruby

मॉड्यूल ActiveModel :: SecurePassword :: ClassMethods

शामिल मॉड्यूल:
ActiveModel::SecurePassword::InstanceMethodsOnActivation , ActiveModel::Validations

सार्वजनिक प्रवृत्ति के तरीके

has_secure_password (विकल्प = {}) स्रोत दिखाएं
# File activemodel/lib/active_model/secure_password.rb, line 55
def has_secure_password(options = {})
  # Load bcrypt gem only when has_secure_password is used.
  # This is to avoid ActiveModel (and by extension the entire framework)
  # being dependent on a binary library.
  begin
    require "bcrypt"
  rescue LoadError
    $stderr.puts "You don't have bcrypt installed in your application. Please add it to your Gemfile and run bundle install"
    raise
  end

  include InstanceMethodsOnActivation

  if options.fetch(:validations, true)
    include ActiveModel::Validations

    # This ensures the model has a password by checking whether the password_digest
    # is present, so that this works with both new and existing records. However,
    # when there is an error, the message is added to the password attribute instead
    # so that the error message will make sense to the end-user.
    validate do |record|
      record.errors.add(:password, :blank) unless record.password_digest.present?
    end

    validates_length_of :password, maximum: ActiveModel::SecurePassword::MAX_PASSWORD_LENGTH_ALLOWED
    validates_confirmation_of :password, allow_blank: true
  end
end

BCrypt पासवर्ड के खिलाफ सेट और प्रमाणित करने के तरीके जोड़ता है। इस तंत्र के लिए आपको एक password_digest विशेषता होना आवश्यक है।

निम्नलिखित सत्यापन स्वचालित रूप से जोड़े जाते हैं:

  • पासवर्ड निर्माण पर मौजूद होना चाहिए

  • पासवर्ड की लंबाई 72 बाइट से कम या बराबर होनी चाहिए

  • पासवर्ड की पुष्टि (एक password_confirmation विशेषता का उपयोग करके)

यदि पासवर्ड पुष्टिकरण सत्यापन की आवश्यकता नहीं है, तो बस password_confirmation लिए मान छोड़ दें (यानी इसके लिए कोई प्रपत्र प्रदान न करें)। जब इस विशेषता का nil मान होता है, तो सत्यापन चालू नहीं होगा।

आगे के अनुकूलन के लिए, सत्यापन को पारित करके डिफ़ॉल्ट मान्यताओं को दबाने के लिए संभव है validations: false तर्क के रूप में validations: false

Gem_ile को has_secure_password का उपयोग करने के लिए has_secure_password (~> 3.1.7) has_secure_password :

gem 'bcrypt', '~> 3.1.7'

सक्रिय रिकॉर्ड का उपयोग करने वाला उदाहरण (जिसमें स्वचालित रूप से ActiveModel::SecurePassword ):

# Schema: User(name:string, password_digest:string)
class User < ActiveRecord::Base
  has_secure_password
end

user = User.new(name: 'david', password: '', password_confirmation: 'nomatch')
user.save                                                       # => false, password required
user.password = 'mUc3m00RsqyRe'
user.save                                                       # => false, confirmation doesn't match
user.password_confirmation = 'mUc3m00RsqyRe'
user.save                                                       # => true
user.authenticate('notright')                                   # => false
user.authenticate('mUc3m00RsqyRe')                              # => user
User.find_by(name: 'david').try(:authenticate, 'notright')      # => false
User.find_by(name: 'david').try(:authenticate, 'mUc3m00RsqyRe') # => user