Oops, fix error when saving user settings with no password set
Ah okay, if you leave the password field blank but don't have one set, our simple `update` method gets annoyed that you left it blank. In this change, we simplify the model API by just overriding `update_with_password` with our own special behavior for the no-password case.
This commit is contained in:
parent
d10c11e261
commit
f450937952
2 changed files with 18 additions and 7 deletions
|
@ -24,13 +24,7 @@ class AuthUsersController < ApplicationController
|
||||||
def update
|
def update
|
||||||
@auth_user = load_auth_user
|
@auth_user = load_auth_user
|
||||||
|
|
||||||
# If the user has a password, then the `current_password` field is required
|
if @auth_user.update_with_password(auth_user_params)
|
||||||
# when updating. If not, then it's not!
|
|
||||||
success = @auth_user.uses_password? ?
|
|
||||||
@auth_user.update_with_password(auth_user_params) :
|
|
||||||
@auth_user.update(auth_user_params)
|
|
||||||
|
|
||||||
if success
|
|
||||||
# NOTE: Changing the password will sign you out, so make sure we stay
|
# NOTE: Changing the password will sign you out, so make sure we stay
|
||||||
# signed in!
|
# signed in!
|
||||||
bypass_sign_in @auth_user, scope: :auth_user
|
bypass_sign_in @auth_user, scope: :auth_user
|
||||||
|
|
|
@ -81,6 +81,23 @@ class AuthUser < AuthRecord
|
||||||
encrypted_password?
|
encrypted_password?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update_with_password(params)
|
||||||
|
# If this account already uses passwords, use Devise's default behavior.
|
||||||
|
return super(params) if uses_password?
|
||||||
|
|
||||||
|
# Otherwise, we implement similar logic, but skipping the check for
|
||||||
|
# `current_password`: Bulk-assign most attributes, but only set the
|
||||||
|
# password if it's non-empty.
|
||||||
|
self.attributes = params.except(:password, :password_confirmation,
|
||||||
|
:current_password)
|
||||||
|
if params[:password].present?
|
||||||
|
self.password = params[:password]
|
||||||
|
self.password_confirmation = params[:password_confirmation]
|
||||||
|
end
|
||||||
|
|
||||||
|
self.save
|
||||||
|
end
|
||||||
|
|
||||||
def connect_omniauth!(auth)
|
def connect_omniauth!(auth)
|
||||||
raise MissingAuthInfoError, "Email missing" if auth.info.email.blank?
|
raise MissingAuthInfoError, "Email missing" if auth.info.email.blank?
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue