设计编辑用户不保存

时间:2015-04-03 03:58:25

标签: ruby-on-rails facebook devise omniauth omniauth-facebook

所以我知道,如果他们通过Facebook进行身份验证,就会绕过编辑用户的设计密码要求大约有50万个问题。我保证我已经阅读了至少75%的内容,但仍无法解决这个问题。

基本上,我已经跟着Carl Edward & Laurie Laine's SO answer here为Devise创建了一个注册控制器,如果用户正在编辑他们的帐户并且用户从Facebook登录,我将绕过密码验证。使用以下代码,它最终不会抛出错误,但我的更新属性都没有保存。

class RegistrationsController < Devise::RegistrationsController

  def update_resource(resource, params)
    if current_user.provider == "facebook"
      params.delete("current_password")
      resource.update_without_password(params)
    else
      resource.update_with_password(params)
    end
  end

  def update
    account_update_params = devise_parameter_sanitizer.sanitize(:account_update)


    # required for settings form to submit when password is left blank
    if account_update_params[:password].blank?
      account_update_params.delete("password")
      account_update_params.delete("password_confirmation")
    end

    @user = User.find(current_user.id)
    if @user.update_attributes(account_update_params)
      @user.update(account_update_params)
      set_flash_message :notice, :updated
      update_resource(@user,account_update_params)
      # Sign in the user bypassing validation in case their password changed
      sign_in @user, :bypass => true
      redirect_to after_update_path_for(@user)
    else
      render "edit"
    end
  end
end

我确实无法弄清楚我做错了什么,但每当我尝试更新我的用户资料作为Facebook验证的登录用户时,我的个人资料或我在控制台中查询数据库时没有任何变化。

1 个答案:

答案 0 :(得分:1)

事实证明,即使必要的属性在我的Devise参数清理程序中,我也错误地将:account_update参数命名为:update。

之前(不工作):

def configure_permitted_parameters
     devise_parameter_sanitizer.for(:sign_up) { |u| u.permit({ roles: [] }, :name,:email, :password, :password_confirmation) }
      devise_parameter_sanitizer.for(:update) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :avatar,:current_password, :about,:user, :name) }
  end
end

在(工作):

def configure_permitted_parameters
     devise_parameter_sanitizer.for(:sign_up) { |u| u.permit({ roles: [] }, :name,:email, :password, :password_confirmation) }
      devise_parameter_sanitizer.for(:account_update) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :avatar,:current_password, :about,:user, :name) }
  end
end