2012-04-03 9 views
0

Ich versuche, einen E-Mail-Verifizierungsprozess in meiner Anwendung einzurichten, und ich erzeuge ein Token gut und E-Mails an den Benutzer, wenn sie sich anmelden. Aber wenn ich auf den Bestätigungslink klicke, werden beide if und else-Anweisungen in der 'users_controller/confirm'-Aktion ausgeführt. Ich werde zu root_path umgeleitet, aber die zwei Felder im Benutzerdatensatz werden geändert. Wenn ich find_by_token von der Rails-Konsole aus starte, wird der erwartete Benutzer zurückgegeben. Ich benutze mysql und frage mich, ob es eine Art Latenz in der Abfrage gibt, die beide ausführen würde.Rails, die if und else-Anweisungen ausführen

def confirm 
    if User.find_by_token(params[:token]).nil? 
     redirect_to root_path 
    else 
     @user = User.find_by_token(params[:token]) 
     cookies[:auth_token] = @user.auth_token 
     User.skip_callbacks = true 
     @user.update_attribute(:token, "") 
     @user.update_attribute(:confirmed, 1) 
     User.skip_callbacks = false 
     reset_session 
     redirect_to routes_path 
    end 
    end 
+0

Das scheint extrem unwahrscheinlich. Ich würde vorschlagen, jedem Zweig der Bedingung einige Ausgaben hinzuzufügen, damit Sie sehen können, welche ausgeführt wird. – MrTheWalrus

+0

ist dieser cut'n'pasted Code, oder hast du ihn neu eingegeben? (Ich frage mich nur, ob Sie einen Tippfehler im echten Code haben, der nicht hier ist, wenn Sie neu eingegeben haben ...) – Pavling

+0

Einverstanden - dieser Code sollte wie erwartet funktionieren. Wenn der tatsächliche Code subtil anders ist, beachten Sie, dass der Aufruf von 'redirect_to' die Ausführung der Aktion nicht stoppt - Sie müssen danach zurückkehren, um dies zu erzwingen. – Thilo

Antwort

2

Sie vor Filter verwenden können, wie diese

before_filter :find_user 

    def confirm 
    #your action code 
    end 

    private 
    def find_user 
    @email = User.find_by_token params[:token].to_s 
    redirect_to root_path, notice: 'Your token is wrong!' if @email.nil? 
    end 

diese Weise wird der Code Ihrer Aktion zu überprüfen und Umleitung wird nur für gültigen Rekord laufen.

+0

Das war nicht das Problem, aber es brachte mich auf den richtigen Weg. Der else-Block wurde ausgeführt und der Cookie wurde erstellt, aber zerstört, sobald das Token aufgrund einer Hilfsmethode auf leer gesetzt wurde. Danke für Ihre Hilfe! – petfreshman