2013-01-23 7 views
5

Używam programisty z rozszerzeniem bezpieczeństwa do sprawdzania silnych haseł.Błąd "już odebrano pocztę" pojawia się dwukrotnie przy rejestracji z rozszerzeniem bezpieczeństwa dla Devise (RoR)

Gdy próbuję zarejestrować konto z już odebraną wiadomością e-mail, pojawia się błąd "wiadomość e-mail została już pobrana" dwukrotnie w haszowaniu błędów.

Mój model użytkownik wygląda następująco:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    # :trackable deleted 
    devise :database_authenticatable, :registerable, :secure_validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :firstname, :lastname, :password, :password_confirmation, :remember_me 
end 

Bez rozszerzenia zabezpieczeń (:validatable zamiast :secure_validatable) pojawia się błąd tylko raz.

Co robię źle?


P.S. Pytanie dodatkowe:

Jak w ogóle zapobiec podnoszeniu niektórych błędów? Czy muszę manipulować rejestratorem RegistrationsController firmy devise lub czy istnieje opcja?

+0

Znalazłeś rozwiązanie? –

+0

Tak, zrezygnowałem z rozszerzenia zabezpieczeń i utworzyłem własne sprawdzanie poprawności hasła. – Conkerchen

+0

Spójrz na moją odpowiedź. –

Odpowiedz

0

Prawdopodobnie masz również: moduł validatable aktywne. Jeśli wspomnisz o tym w ustawieniach devise: secure_validatable pomija te podstawowe sprawdzenia (e-mail: obecność, unikalność i hasło: obecność) i wyświetla błąd tylko raz.

Devise: database_authenticatable,: rejestrującym,: secure_validatable,: validatable

1

Prawdziwym powodem, dlaczego tak się dzieje jest to, że devise_security_extension definiuje Email wyjątkowość walidator dwa razy.

Pierwszy raz, gdy definiuje weryfikator unikalności dla domyślnego pola logowania. Drugi raz, gdy definiuje walidator unikalności dla pola e-mail.

Gdy domyślnym polem logowania jest wiadomość e-mail, która jest dość powszechna, walidator jest zdefiniowany dwukrotnie.

Naprawiłem to, umieszczając poniższy kod w pliku inicjatora. Zapobiega on tworzeniu niepotrzebnego weryfikatora, gdy adres e-mail jest atrybutem logowania.

module Devise 
    module Models 
    module SecureValidatable 
     module ClassMethods 
     private 

     def has_uniqueness_validation_of_login? 
      return true if login_attribute == :email 
      super 
     end 
     end 
    end 
    end 
end 
Powiązane problemy