2017-04-14 73 views
1

我建立使用bcrypt(3.1.7)认证的API,我不断收到一个错误“的参数错误数(0给出,预计1)”为bcrypt错误的参数数目错误

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

可能会显示错误堆栈信息 –

回答

1

我以前有同样的问题。那时我同时使用了devise和bcrypt。其实,你不需要同时使用这两个宝石。你只需要使用一个 - devise或bcrypt。

+0

什么是最佳选择?设计还是bcrypt? –

+0

我很熟悉Devise,更喜欢它。 –