带有Rails和Bcrypt的新用户表单

时间:2013-09-07 18:47:56

标签: ruby-on-rails ruby forms passwords bcrypt-ruby

对于我的小型Rails应用程序,我使用bcrypt在存储用户密码时对其进行哈希处理。但是,在加载新用户表单时,我的密码被“无效哈希”命中,因为我的新操作是

def new
  @user = User.new
end

不会生成新密码,因此无效。为了解决这个问题,我尝试使用

<%= form_for :user, url: users_path do |f| %>

不需要用户对象,允许我在创建操作中进行此操作。但是,错误处理仍然需要User对象并引发nil错误

我觉得应该采用“正确”的方式来做到这一点。谁能开导我?

我的用户模型如下:

require 'bcrypt'

class User < ActiveRecord::Base
# For user of user.password_hash. Thanks, bcrypt!
include BCrypt

before_save { self.email = email.downcase }

# Validates uniqueness of email
validates_uniqueness_of :email

# Set relationship to lists
has_many :lists

def make_new_password
    new_password = Array.new(10).map { (65 + rand(58)).chr }.join
    self.password_hash = Password.create(new_password)
end

def password
    @password ||= Password.new(password_hash)
end

def password=(new_password)
    @password = Password.create(new_password)
    self.password_hash = @password
end
end

1 个答案:

答案 0 :(得分:1)

我觉得this book可以帮助您找到进行用户身份验证的正确方法。 (对不起,我能用你提供的信息做得最好)。

希望这会有所帮助:)