Как сравнить пароль bcrypt, чтобы проверить правильность пароля - PullRequest
0 голосов
/ 21 июня 2019

Я новичок в RoR и пытаюсь создать простую доску, такую ​​как reddit, но без учетной записи пользователя.

Я хочу, чтобы автор поста мог обновить свой пост паролем.

На самом деле я просто следовал коду на github bcrypt gems

Артикул модель

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

Но он сравнивает мой хеш в базе данных со строкой, введенной пользователем, но я где-то читал, когда вы используете == в рельсах, это меняет хеш на строку или что-то в этом роде.

Я нашел другое решение с помощью метода authenticate, но это слишком много для моего использования, я просто хочу проверить, совпадает ли пароль.

Извините, если мой вопрос звучит глупо.

Я использую Rails 5

1 Ответ

0 голосов
/ 21 июня 2019

при редактировании вы должны использовать это

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