I have a user table in my database and what I wish to do is have a
random password generated for each user on create which is then sent to
their email address. I was wondering how I would assign the random
password.

I have the following in my view:

<p>
    <div id="p1"><%= t('.username')%></div>
    <%= f.text_field :username %>
</p>
<p>
    <div id="p1"><%= t('.email')%></div>
    <%= f.text_field :email %>
</p>
<p class="button"><%= f.submit 'Create Account' %></p>

The following in my controller:

def create
 @user = User.new(params[:user])
 respond_to do |format|
   if @user.save
    Notifier.user_created(@user).deliver
       format.html { redirect_to @user, notice: 'User was successfully
created.' }
       format.json { render json: @user, status: :created, location:
@user }
    else
       format.html { render action: "new" }
       format.json { render json: @user.errors,
status::unprocessable_entity }
    end
  end
end

And I have the following in my user model:

attr_accessor :password
before_save :encrypt_password

def encrypt_password
    if password.present?
    self.password_salt = BCrypt::Engine.generate_salt
    self.password_hash = BCrypt::Engine.hash_secret(password,
password_salt)
   end
end

def self.random_string(length=8)
  chars = 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ23456789'
  password = ''
  length.times { |i| password << chars[rand(chars.length)] }
  password
end

def self.authenticate(email, password)
    user = find_by_email(email)
    if user && user.password_hash ==
BCrypt::Engine.hash_secret(password, user.password_salt)
    user
 else
    nil
 end
end

I will have to remove my if password.present? line because it won't be
present but I have the random string code, I just need to assign it to
the hash/salt.

I tried changing the following:

  def encrypt_password
    if self.save
      self.password_salt = String.random_string
      self.password_hash = encrypt_password(@password)
    end
  end

But I get a stack too deep error.

-- 
Posted via http://www.ruby-forum.com/.

-- 
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@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to