2016-04-12 29 views
0

Michael Hartl'ın eğitiminde, aşağıdaki belirtilir. durumdaBoş parola ile eylem güncelleştirmesi

class User < ActiveRecord::Base 
attr_accessor :remember_token 
before_save { self.email = email.downcase } 
validates :name, presence: true, length: { maximum: 50 } 
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
validates :email, presence: true, length: { maximum: 255 } 
       format: { with: VALID_EMAIL_REGEX }, 
       uniqueness: { case_sensitive: false } 
has_secure_password 
validates :password, presence: true, length: { minimum: 6 }, allow_nil: true 

end 

Eğer 9.10 Liste yeni kullanıcılar Bölüm 6.3.3 o has_secure_password özellikle nil şifreleri yakalar ayrı varlığı doğrulanmaktadır boş şifreler, hatırlama ile kayıt izin diye endişeleniyoruz.

Sorunuz, sınamanın geçmesine izin verirse, has_secure_password doğrulaması nasıl çalışıyor? Anlamadım, açıkça has_secure_password doğrulaması, boş bir şifreyi atlamak için bu kuralı "yakalamamak" değildir.

Ayrıca, raylar boş şifreleri kullanıcıya ayarlamamayı ve kaydetmemeyi nasıl biliyor? Lütfen bana yardım et.

cevap

0

Sen belgelerine here kontrol edebilirsiniz, bu kaynak koduna göre, ayrıntılarda her şeyi açıklıyor

: Eğer has_secure_password(validations: false) çağrı olmasaydı

def has_secure_password 
    ..... 
    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 

doğrulamaları üç tür eklenecektir. i geçen testin nedeni olduğunu düşünüyorum: doğrulanan değeri sıfır olduğunda

validates :password, presence: true, length: { minimum: 6 }, allow_nil: true 

:allow_nil seçenek doğrulama atlar.

nasıl raylar ayarlamak ve kullanıcıya boş şifreleri kurtarmak için değil biliyor mu

Eklemek için?

Ben params[:user][:password] nil

boş olup çünkü düşünüyorum