devise_token_auth:在RegistrationsController #create期间错误的参数数量(给定0,预期为1)

时间:2017-07-06 10:54:30

标签: ruby-on-rails devise

我使用devise_token_auth为仅限API的Rails应用设置身份验证。我正在命令行使用httpie使用以下命令测试注册创建:

http POST :3000/auth 'email=username@email.com' 'password=password' 'password_confirmation=password'

响应是错误页面的完整HTML输出,其中的错误是wrong number of arguments (given 0, expected 1)。违规行为是DeviseTokenAuth::RegistrationsController#create

提前感谢任何指导。代码在这里:https://github.com/jraczak/flow-api

设计已应用于User模型:here

Routes就在这里

3 个答案:

答案 0 :(得分:2)

总结聊天讨论并回答......

只需移除https://github.com/jraczak/flow-api/blob/master/app/models/user.rb中的has_secure_password:password_digest中的validates_presence_of :name, :email, :password_digest ...设计已经完成

我发现您已经在架构中添加了encrypted_pa​​ssword列(https://github.com/jraczak/flow-api/blob/master/db/schema.rb)...在这种情况下,从表中删除password_digest列...它可以正常工作

rails g migration RemovePwdDigest

class RemovePwdDigest < ActiveRecord::Migration 
  def change 
    remove_column :users, :password_digest 
  end 
end

即使删除了has_secure_password和验证后可能出现的问题:

https://github.com/plataformatec/devise/blob/ee01bac8b0b828b3da0d79c46115ba65c433d6c8/lib/devise/models/database_authenticatable.rb#L45

如果您看到此行,设计会在设置新密码或使用password = method的任何地方尝试调用它的内部password_digest方法。但是,由于您已经有一个名称类似于方法(password_digest列)的db列,因此它调用的不是设计内部方法。所以,你正面临一个错误。 (我可能错了,这一点似乎很可疑)

答案 1 :(得分:0)

在我当前的模型中,我已经有一个密码摘要。对我有用的是从用户模型中删除devise: database_authenticatable

答案 2 :(得分:0)

如果有人使用 Devise Invitable 和 Devise Token Auth 并收到此错误。检查您没有在仅 API 模式下使用 Rails,特别是从 ActionController::API 继承 ApplicationController 而不是 ActionController::Base