5

que tienen un modelo muy básico de administración:validates_confirmation_of: contraseña no quede activado

class Admin < ActiveRecord::Base 
    has_secure_password 
    validates_uniqueness_of :email 
    attr_accessible :email, :password, :password_confirmation 
end 

According to the manualhas_secure_password añade también un validates_confirmation_of :password. Si estoy correcto, validates_confirmation_of siempre debe tener un error si :password y :password_confirmation no coinciden, incluso si :password_confirmation es nil.

estoy probando con RSpec y esta prueba falla y me dice que es admin válida:

admin = Admin.new 
admin.email = '[email protected]' 
admin.password = 'secret' 
admin.should be_invalid 

Ésta pasa:

admin = Admin.new 
admin.email = '[email protected]' 
admin.password = 'secret' 
admin.password_confirmation = '' 
admin.should be_invalid 

Entonces, ¿qué diablos estoy haciendo ¿incorrecto?

+0

En el primer caso, ¿cuál es el valor de 'admin.password_confirmation' después de configurar la contraseña para' 'secret''? – Dogbert

+0

'admin.password_confirmation' es' nil'. – Wukerplank

Respuesta

5

Aquí está el código para has_secure_password:

# File activemodel/lib/active_model/secure_password.rb, line 32 
def has_secure_password 
    attr_reader :password 

    validates_confirmation_of :password 
    validates_presence_of  :password_digest 

    include InstanceMethodsOnActivation 

    if respond_to?(:attributes_protected_by_default) 
    def self.attributes_protected_by_default 
     super + ['password_digest'] 
    end 
    end 
end 

Como se puede ver que nunca se asegura que una confirmación de la contraseña se envía. Sin embargo, puede agregarlo usted mismo, y siempre que tenga el campo de formulario en su página, se enviará una cadena vacía si no está llena.

+2

Correcto, debería tener RTFM: "Esta comprobación se realiza solo si' password_confirmation' no es 'nil', y de forma predeterminada solo en guardar." (http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_confirmation_of) – Wukerplank

Cuestiones relacionadas