実現したいこと
フロントエンドに 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 文字数の関係で少しだけ省略しています
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
デフォルトでは、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
![guest](/img/icon/icnUserSample.jpg)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。