2012-04-12 12 views
1

Ich habe mich gefragt, warum ein Benutzer immer wieder abgemeldet wird, nachdem er sein Profil bearbeitet hat? meine Update-Funktion istSchienen, Benutzer, der sich nach dem Bearbeiten des Profils abmeldet?

def update 
    flash[:notice] = "what is params[id]", params[:id] 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
     #flash[:success] = "Profile updated" 
     sign_in @user 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

die params id korrekt geführt zu werden, und alles korrekt aktualisiert auf meinem db. meine Form in users/edit.html.erb ist

<% provide(:title, "Edit user") %> 
<h1>Update your profile</h1> 

<div class="row"> 
    <div class="span6 offset3"> 

     <%= form_for @user, :html => {:multipart => true} do |f| %> 
     <%= render 'fields', object: f.object, f: f %> 

     <%= f.submit "Save changes", :class => "btn btn-large btn-primary", :style =>"display:block;" %> 

     <%= image_tag(@user.image_url(:thumb), :class => "image_avatar") if @user.image? %> 

     <%= f.file_field :image, :class=>"upload_button" %> 
     <% end %> 

    </div> 
</div> 

ich die devise gem verwenden, aber diese bearbeiten ist die devise Route nicht mit (ich bin für die Registrierung mit ersinnen). Könnte das das beeinflussen?

Antwort

1

Ja, Gerät hat eine sign_in Methode.

Ihre Benutzer sollten jedoch nicht nach der Bearbeitung ihres Profils abgemeldet werden.

+0

oh wow danke für die rubydoc site! Ich habe nie davon gewusst! hmmm aus irgendeinem Grund, auch nachdem ich sign_in @user hinzugefügt habe, werden meine Benutzer immer noch abgemeldet. Kannst du dir Gründe vorstellen, warum das so sein könnte? – Sasha

+0

Ist der obige Controller-Code vollständig? Was ist als params [: user] übergeben (zeige dein Formular)? – DanS

+0

Ich habe die Frage editiert, anstatt alles in die Kommentare einzufügen – Sasha

2

Ich stieß auch auf dieses seltsame Problem und in meinem Fall war es aufgrund des Passworts neu generiert, wenn der Benutzer gespeichert wurde. Dies passierte, obwohl das Passwortfeld in der Profilform nicht vorhanden war. Das Zurücksetzen erfolgte über einen ActiveRecord Callback, der Benutzern mit Facebook-Authentifizierung ein zufälliges Passwort zugewiesen hat. Ich habe es behoben, indem ich sicherstellte, dass ich niemals ein zufälliges Passwort an Benutzer vergeben werde, die bereits ein chiffriertes_passwort gesetzt haben.

Devise speichert Benutzer in der Sitzung über den Warden-Juwel und was gespeichert wird sieht etwa so aus [[user_id], chiffriertes_passwort] (in der Sitzung ['warden.user.user.key']). Wenn das Passwort geändert wurde, würde die Suche des Benutzers in der Sitzung fehlschlagen - da das verschlüsselte Passwort nicht mehr übereinstimmt - und somit der Benutzer abgemeldet werden würde.

Verwandte Themen