我正在使用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
答案 0 :(得分:4)
如果您在gem文件中使用devise
,请替换:
user.authenticate(create_params[:password])
与
user.valid_password?(create_params[:password])
。
答案 1 :(得分:1)
之前我遇到过同样的问题。那时我同时使用了devise和bcrypt。实际上,你不需要同时使用这两颗宝石。你只需要使用一个 - devise或bcrypt。