cielo
2011-Feb-14 02:03 UTC
Devise is causing the [The change you wanted was rejected.] Error...
I am using the custom made Devise controller.
I moved from PHP to Rails that, old users password are stored in
Devise:user table in form of
"devise_encryption(oldencryption(password))"
If an user login, and app finds out that this user''s password is in
form of "devise_encryption(oldencryption(password))", I then change it
in to a form of "devise_encryption(password)" with password
params[:user][:password]
I am getting the below error when old user tries to login. (new users
who registered after site migration logins just fine)
---------------------------------------------------------------------------
The change you wanted was rejected.
Maybe you tried to change something you didn''t have access to.
---------------------------------------------------------------------------
Simple process is that
STEP 1. do the normal login attempt(find user with email&password) as
what devise do, and if authenticate fails, go to step 2
STEP 2. helper function will do login attempt with my old password
encryption style(md5 for example), and look for the user
STEP 3. if user is found (user with
email&devise_encryption(oldencryption(password))), change the
@user''s
password to the devise_encryption(params[:user][:password]) which just
passed in with Devise password.
Below is the custom devise controller that I am using.
The custom controller looks like this
def create
resource = warden.authenticate!(:scope => resource_name, :recall
=> "oldusercheck") #calling oldusercheck helper function
set_flash_message(:notice, :signed_in)
sign_in_and_redirect(resource_name, resource)
end
def oldusercheck
@user = User.find_by_email(params[:user][:email])
if @user.nil?
set_flash_message(:alert, :invalid)
redirect_to :action=>''new''
else
if @user.valid_password?(Digest::MD5.hexdigest(params[:user]
[:password])) # Authenticates against Devise
@user.password = @user.password_confirmation = params[:user]
[:password] #Save the password with given param
@user.save! # Encrypts the password with Devise
set_flash_message(:notice, :signed_in)
sign_in_and_redirect(resource_name, @user)
else
set_flash_message(:alert, :invalid)
redirect_to :action=>''new''
end
end
end
It think the problem is caused by lines .. (I don''t know if below
lines actually cause the problem..)
@user.password = @user.password_confirmation = params[:user]
[:password] #Save the password with given param
@user.save! # Encrypts the password with Devise
Is this not a correct way to change the password?
Its weird that things work just fine in Development, but does not work
well in Production
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Maybe Matching Threads
- flash[;notice] not display after redirection
- getting devise to return json data when signing out
- Does Devise make use of a "status" method? Weird bug.
- Devise - Configuring the Routes fine for Controller Inheritance
- Rspec devise, testing extended RegistrationController action destroy
