Ruby on rails 在创建时为用户分配随机密码

Ruby on rails 在创建时为用户分配随机密码,ruby-on-rails,passwords,assign,Ruby On Rails,Passwords,Assign,我的数据库中有一个用户表,我想做的是 创建时为每个用户生成的随机密码,然后发送到 他们的电子邮件地址。我想知道如何分配随机数 密码 我认为: <p> <div id="p1"><%= t('.username')%></div> <%= f.text_field :username %> </p> <p> <div id="p1"><%= t('.email')%>

我的数据库中有一个用户表,我想做的是 创建时为每个用户生成的随机密码,然后发送到 他们的电子邮件地址。我想知道如何分配随机数 密码

我认为:

<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>
我的用户模型中包含以下内容:

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(len)
    #generate a random password consisting of strings and digits
    chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a password = ""
    1.upto(len) { |i| password << chars[rand(chars.size-1)]}
    return 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
attr\u访问器:密码
保存前:加密密码
def加密密码
如果密码存在?
self.password\u salt=BCrypt::Engine.generate\u salt
self.password\u hash=BCrypt::Engine.hash\u secret(密码、密码)
结束
结束
定义自身随机字符串(len)
#生成由字符串和数字组成的随机密码
字符=(“a”。“z”)。到_a+(“a”。“z”)。到_a+(“0”。“9”)。到_a密码=“”

1.最多(len){i | password我想,您可以修改您的encrypt|u密码;)

编辑:如果只想在创建时加密密码,可以使用“创建前”而不是“保存前”

def create
 @user = User.new(params[:user])
 @user.password = User.random_string(10) #set it with the size of the password you want
 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
玩得开心

before_save :encrypt_password

def encrypt_password
    self.password = User.random_string(X) unless password.present?
    self.password_salt = BCrypt::Engine.generate_salt
    self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
def create
 @user = User.new(params[:user])
 @user.password = User.random_string(10) #set it with the size of the password you want
 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