45 votes

désactiver le mot de passe de confirmation lors de l'inscription lors de l'utilisation de concevoir

Je suis à l'aide de Concevoir pour les Rails. Par défaut dans le processus d'enregistrement, de Concevoir oblige les utilisateurs à taper le mot de passe deux fois pour la validation et l'authentification. Comment puis-je le désactiver?

Merci à tous. :)

85voto

mistertim Points 1468

Je suis un peu en retard pour cette partie, mais ayant tout juste été de me gratter la tête sur le même problème pour la dernière heure, j'ai pensé que je pourrais partager avec vous la solution la plus simple que j'ai trouvé: vous pouvez simplement retirer l' password_confirmation champ dans le formulaire d'inscription, ce qui désactive la nécessité de confirmer le mot de passe entièrement!


La raison à cela réside dans lib/devise/models/validatable.rb dans le dispositif source:

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

Notez que la validation est déclenché uniquement si password_required? retours true, et password_required? sera de retour false si l' password_confirmation champ est - nil.

Parce que là où l' password_confirmation champ est présent dans le formulaire, il sera toujours inclus dans les paramètres de hachage , comme une chaîne vide s'il est laissé vide, la validation est déclenchée. Toutefois, si vous supprimez l'entrée de la forme, l' password_confirmation dans les params sera nil, et, par conséquent, la validation ne sera pas déclenchée.

Espérons que cela est utile!

Merci,

Tim

36voto

Jeff Dickey Points 1902

Il semble que si vous venez de supprimer la attr_accessible exigence à partir du modèle, il fonctionne très bien sans elle.

Sur une note de côté, je suis d'accord avec cette pratique, dans les rares cas où il y a une faute de frappe, l'utilisateur peut simplement utiliser le mot de passe de récupération pour récupérer leur mot de passe.

11voto

Will Points 3112

Je ne suis pas familier avec les Concevoir, mais si vous avez accès au modèle dans le contrôleur avant d'enregistrer/de validation pourriez-vous faire quelque chose comme ce qui suit

model.password_confirmation = model.password
model.save

3voto

Jimeux Points 255

Pour l'amour de Rails 4 utilisateurs qui trouvent cette question, il suffit de supprimer :password_confirmation de la limite permise params, qui vous déclarer 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

2voto

Nebojsa Zoric Points 41

Solution la plus simple:

Supprimer :traitement pouvant être validé à partir de

devise :database_authenticatable, :registerable,
 :recoverable, :rememberable, :trackable,
 :confirmable, :timeoutable, :validatable

;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X