我使用devise_token_auth来验证rails-api应用程序。我在我的用户模型中包含了这些设计模块,如下所示。
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :confirmable
end
问题是当我在电子邮件注册终结点上发出POST
请求时,http://localhost:3000/auth
以email
,password
和password_confirmation
作为参数。它只在服务器重启后成功一次。注册用户的所有后续请求都会失败,并显示以下错误:
{
"status": 500,
"error": "Internal Server Error",
"exception": "#<ArgumentError: After create callback :send_on_create_confirmation_instructions has not been defined>",
"traces": {
...
}
这意味着我每次要注册用户时都必须重新启动服务器。
这就是我在Gemfile
中的内容。
gem 'devise', github: "plataformatec/devise"
gem 'devise_token_auth', github: "lynndylanhurley/devise_token_auth"
修改
当我在ApplicationController
进行任何更改并保存时。请求成功,无需重新启动服务器。
答案 0 :(得分:1)
我终于找到了一个解决方案,问题是create
中RegistrationsController
的{{1}}方法中的这一行:
devise_token_auth
我不知道为什么我要跳过发送确认说明,而我想要的行为是在创建用户时自动发送确认。
因此,我使用# override email confirmation, must be sent manually from ctrl
resource_class.skip_callback("create", :after, :send_on_create_confirmation_instructions)
gem docs中提供的有关控制器ovverride的信息创建了RegistrationController
create
方法的覆盖。在覆盖中,我注释掉了这一行,一切都按预期工作。
答案 1 :(得分:0)
添加此行之后: resource_class.skip_callback(“ create”,:after,:send_on_create_confirmation_instructions)
只需执行任务
并添加此行以再次设置回调。 resource_class.set_callback(“ create”,:after,:send_on_create_confirmation_instructions)
跳过后,我们需要再次设置回调。