ruby on rails - inglés - deshabilitar la confirmación de la contraseña durante el registro cuando se utiliza el dispositivo
cómo se dice en inglés (9)
Estoy usando Devise for Rails. En el proceso de registro predeterminado, Devise requiere que los usuarios escriban la contraseña dos veces para la validación y la autenticación. ¿Cómo puedo desactivarlo?
Gracias a todos. :)
Creo que esta es la forma sencilla de deshabilitar la confirmación de contraseña: https://github.com/plataformatec/devise/wiki/Disable-password-confirmation-during-registration
Algunos usuarios quieren que el proceso de registro sea más corto y más fácil. Uno de los campos que se pueden eliminar es la confirmación de la contraseña.
La solución más sencilla es: simplemente puede eliminar el campo password_confirmation del formulario de registro ubicado en devise / registrations / new.html.erb (new.html.haml si está usando HAML), ¡lo cual desactiva la necesidad de confirmar la contraseña completamente!
La razón de esto radica en lib / devise / models / validatable.rb en la fuente de Devise:
Tenga en cuenta que la validación solo se activa si se solicita una contraseña? devuelve true, y password_required? devolverá false si el campo password_confirmation es nil.
Debido a que el campo password_confirmation está presente en el formulario, siempre se incluirá en el hash de parámetros, como una cadena vacía si se deja en blanco, se activa la validación. Sin embargo, si elimina la entrada del formulario, la contraseña_confirmación en los parámetros será nula y, por lo tanto, la validación no se activará.
La solución más simple:
Eliminar : validable de
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:confirmable, :timeoutable, :validatable
;)
Las validaciones predeterminadas de Devise ( lib / devise / models / validatable.rb ):
validates_confirmation_of :password, :if => :password_required?
y método:
def password_required?
!persisted? || !password.nil? || !password_confirmation.nil?
end
Necesitamos anular la validación de contraseña predeterminada de Devise. Coloque el siguiente código al final para que no sea anulado por ninguna de las configuraciones de Devise.
validates_confirmation_of :password, if: :revalid
def revalid
false
end
Y tu modelo se vería así:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:confirmable, :timeoutable, :validatable
validates_confirmation_of :password, if: :revalid
def revalid
false
end
end
A continuación, elimine el campo password_confirmation del formulario de registro.
No estoy familiarizado con Devise, pero si tiene acceso al modelo en el controlador antes de guardar / validar, podría hacer algo como lo siguiente
model.password_confirmation = model.password
model.save
Parece que si simplemente elimina el requisito attr_accessible del modelo, funciona bien sin él.
En una nota al margen, estoy de acuerdo con esta práctica, en el caso poco frecuente de que haya un error tipográfico, el usuario puede simplemente usar la recuperación de la contraseña para recuperar su contraseña.
Por el bien de los usuarios de Rails 4 que encuentran esta pregunta, simplemente elimine :password_confirmation
de los parámetros permitidos, que declara en ApplicationController.rb
.
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:username, :email, :password)
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:username, :email, :password)
end
end
Solo necesita eliminar el campo password_confirmation de su formulario.
Ver wiki
def update_with_password(params={})
params.delete(:current_password)
self.update_without_password(params)
end
Llegué un poco tarde a esta fiesta, pero después de haber estado rascándome la cabeza por el mismo problema durante la última hora, pensé en compartir la solución más fácil que he encontrado: simplemente puede eliminar el campo password_confirmation
de El formulario de registro, que desactiva la necesidad de confirmar la contraseña por completo!
La razón de esto radica en lib/devise/models/validatable.rb
en la fuente de Devise:
module Devise
module Models
module Validatable
def self.included(base)
base.class_eval do
#....SNIP...
validates_confirmation_of :password, :if => :password_required?
end
end
#...SNIP...
def password_required?
!persisted? || !password.nil? || !password_confirmation.nil?
end
end
end
end
Tenga en cuenta que la validación solo se activa si se solicita una password_required?
devuelve true
, y password_required?
devolverá false
si el campo password_confirmation
es nil
.
Debido a que el campo password_confirmation
está presente en el formulario, siempre se incluirá en el hash de parámetros, como una cadena vacía si se deja en blanco, se activa la validación. Sin embargo, si elimina la entrada del formulario, la password_confirmation
en los parámetros será nil
y, por lo tanto, la validación no se activará.
Espero que esto sea útil!
Gracias,
Tim