Тестирование 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 создания нового пользователя ). Однако на странице у меня есть следующая ошибка:
и 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