Devise_token_auth導入時にURLを変更する方法

導入そのものについては参考になる他記事がたくさんあるので省略。

他記事でよく見かけたroutes

Rails.application.routes.draw do  
  namespace :api do
    namespace :v1, defaults: {format: :json } do
      mount_devise_token_auth_for 'User', at: 'auth', controllers: {
        registrations: 'api/v1/registrations',
        sessions: 'devise_token_auth/sessions'
      }
    end
  end
end

この記述で「[post]/api/v1/auth」ならユーザー作成、「[post]/api/v1/auth/sign_in」でログインになる。

使えることは使えるんだが、authがユーザー作成、sign_inでログインは直感的じゃないので、ユーザー作成なら「[post]/api/v1/user」、ログインは「[post]/api/v1/login」みたいにしたい。

あと、v1もバージョン管理するほどじゃないので省略したい。

結論

Rails.application.routes.draw do  
  scope :api, defaults: { format: :json } do
    mount_devise_token_auth_for 'User', at: 'users', skip: [:sessions,], controllers: {
      registrations: 'api/users'
    }

    devise_scope :user do
      post 'login', to: 'devise_token_auth/sessions#create'
      delete 'logout', to: 'devise_token_auth/sessions#destroy'
    end
  end
end

こうすることで、ユーザー作成なら「[post]/api/user」、ログインなら「[post]/api/login」にできた。

namespaceがほぼ一択で他記事にのっていたから、意味のあるものだと気づけなかった。

参考記事

Railsでdevise_token_auth使ってトークン認証する

Railsのroutingにおけるscope / namespace / module の違い