routes.rb
Rails.application.routes.draw do
  #Customer
  devise_for :customers, controllers: {
    sessions: 'customers/sessions',
    passwords: 'customers/passwords'
  }
  resources :companies, only: [:show, :new, :create, :index] do
    #Customer registration
    devise_for :customers, controllers: {
      registrations: 'customers/registrations'
    }
  end
  namespace :api do
    scope :v1 do
      mount_devise_token_auth_for 'Customer', at: 'customer_auth', controllers: {
          registrations: 'api/v1/customers/registrations',
          passwords: 'api/v1/customers/passwords',
          sessions: 'api/v1/customers/sessions',
          confirmations: 'api/v1/customers/confirmations'
          #Login/api/v1/customer_auth/sign_in
          #Change Password/api/v1/customer_auth/password
          #Resend verification email/api/v1/customer_auth/confirmation
      }
    end
  end
...
application_controller.rb
class ApplicationController < ActionController::Base
    protect_from_forgery with: :null_session, if: -> {request.format.json?}
end   
After using devise and then introducing devise token auth, I had to quote from ActionController :: Base.
Also, without include DeviseTokenAuth :: Concerns :: SetUserByToken, even if you put client and accece-token in the header forbefore_action: authenticate_customer!, An authentication error will occur.
api/vi/application_controller.rb
module Api
    module V1
      # class ApplicationController < ActionController::API # Note: here is not ::BASE
      class ApplicationController < ActionController::Base
        include DeviseTokenAuth::Concerns::SetUserByToken
        protect_from_forgery with: :null_session
        respond_to :json
        end
      end
    end
end 
        Recommended Posts