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

jus*_*zak 2 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模型:这里

路线在这里

Vam*_*hna 5

用答案总结聊天讨论...

只需has_secure_passwordhttps://github.com/jraczak/flow-api/blob/master/app/models/user.rb 中删除并:password_digestvalidates_presence_of :name, :email, :password_digest...Devise 中删除

我看到您已经在架构中添加了 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
Run Code Online (Sandbox Code Playgroud)

即使删除了 has_secure_password 和验证,也可能出现了什么问题:

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

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