bcrypt错误的参数数量错误

时间:2017-04-14 03:15:08

标签: ruby-on-rails

我正在使用bcrypt(3.1.7)构建身份验证API,并且我一直收到错误“错误的参数数量(给定0,预期为1)”

    if user && user.authenticate(create_params[:password])

这是发生错误的SessionsController。

class Api::V1::SessionsController < Api::V1::BaseController
  def create
    user = User.find_by(email: create_params[:email])
    if user && user.authenticate(create_params[:password])
      self.current_user = user
      render(
        json: Api::V1::SessionSerializer.new(user, root: false).to_json,
        status: 201
      )
    else
      return api_error(status: 401)
    end
  end

  private
  def create_params
    params.require(:user).permit(:email, :password)
  end
end

这是用户模型

class User < ApplicationRecord
  # email, name, encrypted_password, authentication_token, password_digest, ...
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  before_create :generate_authentication_token

  has_secure_password

  def generate_authentication_token
    loop do
      self.authentication_token = SecureRandom.base64(64)
      break unless User.find_by(authentication_token: authentication_token)
    end
  end

  ...

end

2 个答案:

答案 0 :(得分:4)

如果您在gem文件中使用devise,请替换:

user.authenticate(create_params[:password])

user.valid_password?(create_params[:password])

答案 1 :(得分:1)

之前我遇到过同样的问题。那时我同时使用了devise和bcrypt。实际上,你不需要同时使用这两颗宝石。你只需要使用一个 - devise或bcrypt。