如何比较bcrypt密码以检查密码是否正确

时间:2019-06-21 09:22:09

标签: ruby-on-rails bcrypt

我是RoR的新手,我正在尝试创建一个像reddit这样的简单板,但是没有用户帐户。

我希望帖子的作者可以使用密码更新他的帖子。

实际上,我只是遵循了bcrypt gems的github上的代码

商品模型

require 'bcrypt'

class Article < ActiveRecord::Base
  # users.password_hash in the database is a :string
  include BCrypt

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

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

商品控制器

def create
  @article = Article.new(params[:article])
  @article.password = params[:password]
  @article.save!
end

现在我正在尝试像他们的登录名一样进行编辑

def edit
  @article = Article.find(params[:id])
  if @article.password == params[:password]
    render 'edit'
  else
    redirect_to @article
  end
end

但是它将数据库中的哈希与用户输入的字符串进行了比较,但是当您在rails中使用==时,我在某处读取了它通过字符串或类似方式更改哈希的情况。

我发现了使用方法authenticate的其他解决方案,但这对我来说实在太多了,我只想检查密码是否匹配。

抱歉,我的问题听起来很愚蠢。

我正在使用Rails 5

1 个答案:

答案 0 :(得分:0)

在您的编辑操作中,您应该使用此

BCrypt::Password.new(@article.password) == params[:password]