设计编辑用户不保存
Devise Edit User Not Saving
所以我知道大约有 50 万个问题是关于绕过编辑用户的设计密码要求(如果用户通过 Facebook 进行身份验证)。我保证我已经阅读了其中至少 75% 的内容,但仍然无法理解这一点。
基本上,我按照 Carl Edward & Laurie Laine's SO answer here 为 Devise 创建了一个注册控制器,如果用户正在编辑他们的帐户并且用户是从 Facebook 登录的,它将允许我绕过密码验证。使用以下代码,它最终不会抛出错误,但 none 我更新的属性正在保存。
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 认证的登录用户时,我的个人资料没有任何变化,或者当我在我的控制台中查询数据库时。
我发现尽管必要的属性在我的 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
所以我知道大约有 50 万个问题是关于绕过编辑用户的设计密码要求(如果用户通过 Facebook 进行身份验证)。我保证我已经阅读了其中至少 75% 的内容,但仍然无法理解这一点。
基本上,我按照 Carl Edward & Laurie Laine's SO answer here 为 Devise 创建了一个注册控制器,如果用户正在编辑他们的帐户并且用户是从 Facebook 登录的,它将允许我绕过密码验证。使用以下代码,它最终不会抛出错误,但 none 我更新的属性正在保存。
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 认证的登录用户时,我的个人资料没有任何变化,或者当我在我的控制台中查询数据库时。
我发现尽管必要的属性在我的 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