Тестирование rails API для регистрации с помощью devise. Ошибка: "отсутствует параметр" подтвердить url-адрес успеха"."

Я пытаюсь использовать разработки и devise_token_auth для аутентификации в моем приложении.

Я переопределяю контроллер регистрации следующим образом:

module Overrides
  class RegistrationsController < DeviseTokenAuth::RegistrationsController

    ## I am doing these to go around the `Can't verify CSRF token authenticity` Error.
    # skip_before_action :valid_authenticity_token, only: :create
    protect_from_forgery :except => :create


    def sign_up_params
      params.require(:user).permit(:email, :password, :password_confirmation, :name, :nickname)
    end

  end
end

Я также отправляю свои параметры, используя swagger docs api следующим образом:

swagger_api :create do
  summary "Sign up a new user"
  param :form, "user[email]", :string, :required, "Email of the new user"
  param :form, "user[password]", :string, :required, "Password of the new user"
  param :form, "user[password_confirmation]", :string, :required, "Retype Password of the new user"
  param :form, "user[name]", :string, :optional, "Name of the new user"
  param :form, "user[nickname]", :string, :optional, "Nick-Name of the new user"
  response :not_acceptable
  response :success
end

это производит параметры на моем терминале следующим образом:

Processing by Overrides::RegistrationsController#create as JSON
  Parameters: {"user"=>{"email"=>"sadf@fsd.fgs", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "name"=>"rgefsrfgrfdfsd", "nickname"=>"rgefsrfgrfdfsd"}}

однако, данный запрос не попадает на мои модели ( talkless создания нового пользователя ). Однако на странице у меня есть следующая ошибка:

Screen shot of the error response.

и Completed 403 Forbidden in 93ms (Views: 0.3ms | ActiveRecord: 0.0ms) на терминале.

как я могу решить эту проблему? Спасибо

обновление:

#route.rb: 
namespace :api do
    namespace :v1 do


      mount_devise_token_auth_for 'User', at: 'auth', controllers: {
                                          confirmations:      'overrides/confirmations',
                                          passwords:          'overrides/passwords',
                                          registrations:      'overrides/registrations',
                                          sessions:           'overrides/sessions',
                                        }
      ...

    end
  end


#Countroller:
class ApiController < ApplicationController
  include DeviseTokenAuth::Concerns::SetUserByToken
  protect_from_forgery with: :null_session
end

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
end

#user.rb:
class User < ActiveRecord::Base
  # Include default devise modules.
  devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable,
          :confirmable, :omniauthable
  include DeviseTokenAuth::Concerns::User

3 ответов


на confirm_success_url параметр используется для поддержки нескольких клиентских приложений. Если параметр не требуется, то API не имеет возможности узнать, куда перенаправлять после подтверждения по электронной почте.

но для devise_token_auth ваш application_controller.rb должно быть:

  protect_from_forgery with: :null_session
  include DeviseTokenAuth::Concerns::SetUserByToken

в своем маршруты.rb

mount_devise_token_auth_for 'User', at: 'auth'

удалить confirmable tag In пользователей.rb, так что это выглядит как ниже

 devise :database_authenticatable, :recoverable,
         :trackable, :validatable, :registerable,
         :omniauthable

  include DeviseTokenAuth::Concerns::User

в качестве примечания для всех, кто может найти это, если у вас есть

  include DeviseTokenAuth::Concerns::User

до код на user.rb, devise_token_auth будет включить список модулей для вас, который включает в себя confirmable в списке (и может генерировать сообщение об ошибке выше). Просто переместите модуль include после раздел devise и он будет работать.

это не проблема, которая была у ОП, но так я сюда попал.


решение состоит в том, чтобы установить URL по умолчанию в config/initializer/devise_token_auth.rb:

DeviseTokenAuth.setup do |config|
    config.default_confirm_success_url = "confirmed"
end