【问题标题】:rails, user signing out after editing profile?rails,用户在编辑个人资料后退出?
【发布时间】:2016-01-18 03:34:22
【问题描述】:

我想知道为什么用户在编辑个人资料后总是退出登录?我的更新功能是

  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,但此编辑未使用设计路线(我使用设计进行注册)。会不会有影响?

【问题讨论】:

    标签: ruby-on-rails devise helper


    【解决方案1】:

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

    Devise 通过warden gem 将用户存储在会话中,存储的内容类似于[[user_id], encrypted_pa​​ssword](在会话中['warden.user.user.key'])。更改密码后,会话中的监护人用户查找将失败 - 因为加密的密码不再匹配 - 因此用户将被注销。

    【讨论】:

      【解决方案2】:

      是的,devise 有一个sign_in 方法。

      但是,您的用户不应在编辑个人资料后退出。

      【讨论】:

      • 哇,谢谢你的 ruby​​doc 网站!我从来不知道!嗯,出于某种原因,即使在添加了 sign_in @user 之后,我的用户仍然会被注销。你能想到什么原因吗?
      • 以上控制器代码是否完整?作为 params[:user] 传递的内容(显示您的表单)?
      • 我编辑了问题,而不是在 cmets 中粘贴所有内容
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多