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-/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.