轨道,用户在编辑配置文件后注销



我想知道为什么用户在编辑个人资料后不断注销? 我的更新功能是

  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

params id正确传递,并且数据库上的所有内容都正确更新。 我在users/edit.html.erb中的表单是

<% 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>

我正在使用devise gem,但此编辑没有使用设计路线(我正在使用设计进行注册)。 这会影响它吗?

我也遇到了这个奇怪的问题,就我而言,这是由于在保存用户时重新生成密码。即使配置文件表单中不存在密码字段,也会发生这种情况。重置是通过ActiveRecord回调进行的,该回调为具有Facebook身份验证的用户分配了一个随机密码。我通过确保我永远不会为已经设置encrypted_password的用户分配随机密码来修复它。

Devise 通过 warden gem 将用户存储在会话中,存储的内容看起来像 [[user_id]、encrypted_password](在 session['warden.user.user.key'] 中)。更改密码时,警告者在会话中的用户查找将失败 - 因为加密的密码不再匹配 - 因此用户将被注销。

是的,设计有一个sign_in方法。

但是,您的用户在编辑其个人资料后不应注销。

最新更新