2016-09-29 4 views
0

In einer Rails-App hat die Konfig-Devise-Datei die Option reset_password_keys. Gibt es eine Möglichkeit, einen der Schlüssel optional zu machen?So legen Sie eine optionale reset_password_keys für Devise fest

Momentan habe ich diese Einstellung config.reset_password_keys = [ :email, :account_id ].

Ich möchte die: account_id einen optionalen Schlüssel machen, wenn keine account_id vorhanden ist.

Antwort

0

Es gibt ein entry auf Devise's Wiki, das damit umgeht. Ich würde vorschlagen, dass Sie Folgendes tun:

# on config/initializers/devise.rb: 
config.reset_password_keys = [ :email, :account_id ] 

# on User model 
def self.find_first_by_auth_conditions(warden_conditions) 
    conditions = warden_conditions.dup 
    where(account_id: conditions[:account_id], email: conditions[:email]).first 
end 

# on passwords/new.html.erb 
<%= f.label :email %><br /> 
<%= f.text_field :email %></p> 
<%= f.label :account_id %><br /> 
<%= f.text_field :account_id %></p> 
+0

Ich habe zwei Modelle, die mein Passwort vergessen hat, auf klicken können, User.rb und Admin.rb . Wenn ein Benutzer sein Passwort zurücksetzt, benötigt er die E-Mail-Adresse und die Account-ID, aber wenn sich der Admin anmeldet, kann nur eine E-Mail verwendet werden, da er keine Account-ID hat. –

+0

Gibt es eine Möglichkeit, die config.reset_password_keys basierend auf dem Modell auf verschiedene Schlüssel zu setzen? Für Benutzer config.reset_password_keys = [: email,: account_id] und für Admin config.reset_password_keys = [: email]. –

+1

Oh .. Jetzt verstehe ich es. Für User.rb sind sowohl Email als auch account_id erforderlich. Ich habe das nicht versucht, aber ich denke, Sie müssen '.find_first_by_auth_conditions' auf' User.rb' und 'Admin.rb' überschreiben. Ich denke, du kannst bei deinem Array bleiben [: email,: account_id] und ignorierst einfach 'account_id' für das Admin-Modell. –

1

Das funktioniert für mich folgende:

#Admin.rb devise :database_authenticatable, :encryptable, :recoverable, :rememberable, :trackable, :reset_password_keys => [:email]

Verwandte Themen