devise_token_authで、POSTリクエストのルーティングがマッチしない

実現したいこと

フロントエンドに React, バックエンドに RailsAPI, DBにMySQLを置いて、dockerで運用しています。

devise_token_auth という gem を使って、簡単な認証機能を実装したいです。
フロント部分を全く導入できていないので、目下、curlコマンドを通してPOSTリクエストを送って正常にJSONが返ってくることを目標にしています。

発生している問題・分からないこと

❯ curl -X POST http://localhost:3001/api/auth \ -d "name=hoge" \ -d "email=test@example.com" \ -d "password=password" \ -d "password_confirmation=password"

とした時に、404エラーが発生します。

エラーメッセージ

error

1{"status":404, 2 "error":"Not Found", 3 "exception":"#\u003cActionController::RoutingError: No route matches [POST] \"/api/auth\"\u003e", 4 "traces":{"Application Trace":[] ... (以下略) 5}

該当のソースコード

config/routes.rb

1Rails.application.routes.draw do 2 namespace :api do 3 resources :test, only: [:index] 4 # 認証コントローラ(devise_token_auth) 5 mount_devise_token_auth_for 'User', at: 'auth', controllers: { 6 registrations: 'api/auth/registrations' 7 } 8 namespace :auth do 9 resources :sessions, only: [:index] 10 end 11 end 12end 13

app/controllers/api/auth/registrations_controller.rb

1class Api::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController 2 private 3 4 def sign_up_params 5 params.permit(:name, :password, :password_confirmation) 6 end 7end 8

app/controllers/application_controller.rb

1class ApplicationController < ActionController::API 2 include DeviseTokenAuth::Concerns::SetUserByToken 3 4 skip_before_action :verify_authenticity_token 5 helper_method :current_user, :user_signed_in? 6end 7

# rails routes の実行結果 ❯ docker compose exec api rails routes Prefix Verb URI Pattern Controller#Action api_test_index GET /api/test(.:format) api/test#index new_api_user_session GET /api/auth/sign_in(.:format) devise_token_auth/sessions#new api_user_session POST /api/auth/sign_in(.:format) devise_token_auth/sessions#create destroy_api_user_session DELETE /api/auth/sign_out(.:format) devise_token_auth/sessions#destroy new_api_user_password GET /api/auth/password/new(.:format) devise_token_auth/passwords#new edit_api_user_password GET /api/auth/password/edit(.:format) devise_token_auth/passwords#edit api_user_password PATCH /api/auth/password(.:format) devise_token_auth/passwords#update PUT /api/auth/password(.:format) devise_token_auth/passwords#update POST /api/auth/password(.:format) devise_token_auth/passwords#create cancel_api_user_registration GET /api/auth/cancel(.:format) api/auth/registrations#cancel new_api_user_registration GET /api/auth/sign_up(.:format) api/auth/registrations#new edit_api_user_registration GET /api/auth/edit(.:format) api/auth/registrations#edit api_user_registration PATCH /api/auth(.:format) api/auth/registrations#update PUT /api/auth(.:format) api/auth/registrations#update DELETE /api/auth(.:format) api/auth/registrations#destroy POST /api/auth(.:format) api/auth/registrations#create api_auth_validate_token GET /api/auth/validate_token(.:format) devise_token_auth/token_validations#validate_token api_auth_sessions GET /api/auth/sessions(.:format) api/auth/sessions#index rails_postmark_inbound_emails POST /rails/action_mailbox/postmark/inbound_emails(.:format) action_mailbox/ingresses/postmark/inbound_emails#create rails_relay_inbound_emails POST /rails/action_mailbox/relay/inbound_emails(.:format) action_mailbox/ingresses/relay/inbound_emails#create rails_sendgrid_inbound_emails POST /rails/action_mailbox/sendgrid/inbound_emails(.:format) action_mailbox/ingresses/sendgrid/inbound_emails#create rails_mandrill_inbound_health_check GET /rails/action_mailbox/mandrill/inbound_emails(.:format) action_mailbox/ingresses/mandrill/inbound_emails#health_check rails_mandrill_inbound_emails POST /rails/action_mailbox/mandrill/inbound_emails(.:format) action_mailbox/ingresses/mandrill/inbound_emails#create rails_mailgun_inbound_emails POST /rails/action_mailbox/mailgun/inbound_emails/mime(.:format) action_mailbox/ingresses/mailgun/inbound_emails#create rails_conductor_inbound_emails GET /rails/conductor/action_mailbox/inbound_emails(.:format) rails/conductor/action_mailbox/inbound_emails#index POST /rails/conductor/action_mailbox/inbound_emails(.:format) rails/conductor/action_mailbox/inbound_emails#create new_rails_conductor_inbound_email GET /rails/conductor/action_mailbox/inbound_emails/new(.:format) rails/conductor/action_mailbox/inbound_emails#new rails_conductor_inbound_email GET /rails/conductor/action_mailbox/inbound_emails/:id(.:format) rails/conductor/action_mailbox/inbound_emails#show new_rails_conductor_inbound_email_source GET /rails/conductor/action_mailbox/inbound_emails/sources/new(.:format) rails/conductor/action_mailbox/inbound_emails/sources#new rails_conductor_inbound_email_sources POST /rails/conductor/action_mailbox/inbound_emails/sources(.:format) rails/conductor/action_mailbox/inbound_emails/sources#create rails_conductor_inbound_email_reroute POST /rails/conductor/action_mailbox/:inbound_email_id/reroute(.:format) rails/conductor/action_mailbox/reroutes#create rails_conductor_inbound_email_incinerate POST /rails/conductor/action_mailbox/:inbound_email_id/incinerate(.:format) rails/conductor/action_mailbox/incinerates#create 文字数の関係で少しだけ省略しています

試したこと・調べたこと

上記の詳細・結果

デフォルトでは、registrations_controller.rb は、

registrations_controller.rb

1class Api::Auth::RegistrationsController < ApplicationController 2end

のようになっていました。その時は、404エラーではなく、

errors

1{"status":500," 2 error":"Internal Server Error", 3 "exception":"#\u003cNoMethodError: undefined method `devise' for class User, 4(以下略) 5}

のようになっていました。

正直、何を頼りにアイデアを探せば良いかわかりません。
どなたか、お力添えを頂けますと幸いです。

補足

ruby:3.3.1
rails: 7.1.3.2

コメントを投稿

0 コメント