【问题标题】:ArgumentError: After create callback :send_on_create_confirmation_instructions has not been defined. devise_token_authArgumentError:创建回调后:send_on_create_confirmation_instructions 尚未定义。 devise_token_auth
【发布时间】:2020-04-06 22:20:29
【问题描述】:

我正在使用 devise_token_auth 来验证 rails-api 应用程序。我已将这些设计模块包含在我的用户模型中,如下所示。

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :confirmable
end

问题是当我在电子邮件注册端点上执行POST 请求时,http://localhost:3000/auth 使用emailpasswordpassword_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 进行任何更改并保存时。请求成功,无需重启服务器。

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    我终于找到了解决办法,问题是devise_token_authRegistrationsControllercreate方法中的这一行:

    # override email confirmation, must be sent manually from ctrl
        resource_class.skip_callback("create", :after, :send_on_create_confirmation_instructions) 
    

    我不知道为什么要跳过发送确认指令,而我想要的行为是在创建用户时自动发送确认。

    因此,我使用 devise_token_auth gem 文档中提供的控制器 ovverride 信息创建了 RegistrationControllercreate 方法的覆盖。在覆盖中,我注释掉了这一行,一切都按预期工作。

    【讨论】:

      【解决方案2】:

      添加此行后: resource_class.skip_callback("create", :after, :send_on_create_confirmation_instructions)

      执行任务

      并添加此行以再次设置回调。 resource_class.set_callback("create", :after, :send_on_create_confirmation_instructions)

      跳过后需要重新设置回调。

      【讨论】:

        猜你喜欢
        • 2016-09-28
        • 2018-04-15
        • 2017-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 2011-08-03
        相关资源
        最近更新 更多