2010-12-21 7 views
0

Ich möchte ein boolesches Flag bei Benutzerbestätigung über Devise setzen. Im Wesentlichen möchte ich den Benutzer als "aktiv" festlegen. Devise bestätigt jedoch einfach das Konto und meldet sie an.Modify Bestätigung mit Devise

Wie kann ich einen Rückruf von einigen Arten erstellen, um meinen Benutzerdatensatz zu aktualisieren, um diese aktive Spalte bei der Bestätigung auf "true" zu setzen?

Jede Hilfe sehr geschätzt!

Antwort

1

Vorausgesetzt, dass Ihr Authentifizierungsmodell User genannt wird, können Sie dies tun:

class User < ActiveRecord::Base 
    def active? 
    super and (not self.confirmed_at.nil?) 
    end 
end 

Damit Devise den Benutzer nicht anmelden, sondern wird bis der Benutzer bestätigt (das confirmed_at Feld wartet nicht-NULL sein Wenn ein Benutzer dies bestätigt hat)

+0

Ok - neugierig, wie kann ich das ändern, so dass, wenn sie auf den E-Mail-Link klicken, es auch die "aktive" Flagge auf wahr setzt? Danke nochmal für den Anstupser. –

+0

Sie müssen das im Controller tun. –

0

Für Ihre spezielle Frage ist es besser, wenn Sie Ihr active? Attribut als confirmed_at als null implementieren, wie von Zabba vorgeschlagen.

Aber hier ist, wie Sie tun, was Sie fragen, da es hilfreich sein kann für Menschen, die versuchen, andere Werte auf den Benutzer nach der Bestätigung einzustellen.

class Users::ConfirmationsController < Devise::ConfirmationsController 

    def show 
    # let Devise actually confirm the user 
    super 
    # if they're confirmed, it will also log them in 
    if current_user then 
     # and you can do whatever you want with their record 
     current_user.active = true 
    end 
    end 

end 
0

Dies ist im Grunde ein Kommentar zu Turadg's Answer unten. Wenn Sie diesem Vorschlag folgen (was ich getan habe), haben Sie ein kleines Problem, wenn Benutzer versuchen, ein ungültiges Bestätigungs-Token zu verwenden. Sie erhalten eine "Fehlende Vorlage Benutzer/Bestätigungen/Neu". Was Devise :: ConfirmationsController hier macht, sendet Sie an devise/confirmations/new, um Ihnen mitzuteilen, dass das Token ungültig ist und Ihnen erlaubt, ein anderes zu senden.

Da ich bereits die Devise-Ansichten angepasst habe, habe ich die Datei devise/confirmations/new.html.haml an den nun erwarteten Ort unter user/confirmations/new.html verschoben, um dieses kleine Problem zu umgehen .haml.