公式のドキュメントをちゃんと読めばわかる内容ですが、地味にはまったので書きます…
発生したエラー
ログインしたユーザーのみアクセス可能にしたpostsコントローラにリクエストを送ったところ以下のようなエラーが出ました。
NoMethodError (undefined method `authenticate_user!' for #<Api::V1::PostsController:0x00007f0a5806dee8>):
解決策
どうやらdevise_token_authのヘルパーメソッドを記述するときはroute.rbの内容次第で変更しなければならないようです。
僕のルートは
routes.js
Rails.application.routes.draw do
devise_for :users
namespace :api do
namespace :v1 do
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
registrations: 'api/v1/auth/registrations'
}
resources :posts
end
end
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
という感じになっています。
namespace
が使われているので/api/v1/auth
とのようになります。
この時、ヘルパーメソッドを以下の様に変更しなくてはなりません
before | after |
---|---|
before_action :authenticate_user! | before_action :authenticate_api_v1_user! |
current_user | current_api_v1_user |
まとめ
英語のドキュメントばかりで大変でしたが、この記事が日本の駆け出しエンジニアの助けになれば幸いです!