Avoid putting ActionController::Parameters objects in the session

This commit is contained in:
Tom Hughes 2022-01-11 19:42:31 +00:00
parent 6be336db00
commit d6da1499fc
2 changed files with 10 additions and 8 deletions

View file

@ -35,17 +35,19 @@ class AccountsController < ApplicationController
:form_action => %w[accounts.google.com *.facebook.com login.live.com github.com meta.wikimedia.org] :form_action => %w[accounts.google.com *.facebook.com login.live.com github.com meta.wikimedia.org]
) )
user_params = params.require(:user).permit(:display_name, :new_email, :pass_crypt, :pass_crypt_confirmation, :auth_provider)
if params[:user][:auth_provider].blank? || if params[:user][:auth_provider].blank? ||
(params[:user][:auth_provider] == current_user.auth_provider && (params[:user][:auth_provider] == current_user.auth_provider &&
params[:user][:auth_uid] == current_user.auth_uid) params[:user][:auth_uid] == current_user.auth_uid)
update_user(current_user, params) update_user(current_user, user_params)
if current_user.errors.count.zero? if current_user.errors.count.zero?
redirect_to edit_account_path redirect_to edit_account_path
else else
render :edit render :edit
end end
else else
session[:new_user_settings] = params session[:new_user_settings] = user_params.to_h
redirect_to auth_url(params[:user][:auth_provider], params[:user][:auth_uid]), :status => :temporary_redirect redirect_to auth_url(params[:user][:auth_provider], params[:user][:auth_uid]), :status => :temporary_redirect
end end
end end

View file

@ -6,15 +6,15 @@ module UserMethods
## ##
# update a user's details # update a user's details
def update_user(user, params) def update_user(user, params)
user.display_name = params[:user][:display_name] user.display_name = params[:display_name]
user.new_email = params[:user][:new_email] user.new_email = params[:new_email]
unless params[:user][:pass_crypt].empty? && params[:user][:pass_crypt_confirmation].empty? unless params[:pass_crypt].empty? && params[:pass_crypt_confirmation].empty?
user.pass_crypt = params[:user][:pass_crypt] user.pass_crypt = params[:pass_crypt]
user.pass_crypt_confirmation = params[:user][:pass_crypt_confirmation] user.pass_crypt_confirmation = params[:pass_crypt_confirmation]
end end
if params[:user][:auth_provider].nil? || params[:user][:auth_provider].blank? if params[:auth_provider].nil? || params[:auth_provider].blank?
user.auth_provider = nil user.auth_provider = nil
user.auth_uid = nil user.auth_uid = nil
end end