[Rails] Change password

Jim Lindley
Mon, 14 Aug 2006 19:30:00 -0000

On 8/14/06, Mohit Sindhwani <mo_mail@onghu.com>
wrote:
>
> Is there an addition to the Rails Recipe or the method in AWDWR to allow
> a user to change his/ her password?  I have put something together that
> does all the work again - mostly because I''m not sure how to
leverage on
> methods like ''password='' that are defined in the model.
Has anyone got
> a ready sample that I could learn from?



In the controller:

def change_password
    @user = User.find(session[:user])
    if request.post? && @user.update_attributes(params[:user])
      flash[:notice] = "Successfully updated your password."
      redirect_to home_url && return
    else
      flash[:notice] = "There was a problem, please check for errors and
try
again."
   end
end

In the view:

    <%= form_tag :action => controller.action_name, :id => @user%>

New Password
    <%= password_field :user, ''password''
%>

Password
Confirmation
    <%= password_field :user, ''password_confirmation''
%>

    <%= submit_tag "Change Password", :class =>
''submit'' %>

    <%= end_form_tag %>

You''ll need to tweak validations a bit to get everything to work. If
you are
validating the presence of other attributes on save, you''ll need to add
them
in before saving.

The reasoning for having a password= method is that there is no underlying
field in the database for ActiveRecord to automatically create methods for.
The password attribute has to be set up manually.

You use the writer just as you''d assign a value to a model''s
other fields.

def password
  @password
end

def password=(pass)
  @password = pass
end

User.password = ''secret'' # this line will invoke passwordpass
= User.password    # this line will invoke password

What problems are you running into that you have to recreate different
methods to update? You didn''t give any specifics on the problems that
you
are having, you just gave them for your work-arounds.
-------------- next part --------------
An HTML attachment was scrubbed...