devise-token-authでaccess-tokenをresponseで取得できない


今回発生した問題

ページ内でrequest.headersにアクセスしても認証に必要なaccess-tokenclientが見当たらない。(apiをpostmanで叩いたら見れるのに...)

以下はpostmanに表示されたレスポンスヘッダ

原因

APIとクライアントが異なるドメイン上にある場合に、RailsAPIにcross origin requestを許可する必要があり、exposeに関する記述が抜けていた。

参考にしたサイト

devise-token-authの公式ドキュメント(英語)
内容は同じですが、これを翻訳してくれているサイト
devise-token-authの公式ドキュメント(和訳)

修正したところ

ファイルの場所はプロジェクトによるが、CORSについて書かれているconfigファイルを書き換えた。今回は以下のファイルを修正する。

/back/config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'localhost:8080'

    resource '*',
      headers: :any,
      expose: ['access-token', 'uid', 'client'], #この行を新たに追加
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

最後に

この問題を解決するに当たり、様々な記事を行き来したが、最終的には公式ドキュメントであっさり解決してしまった。