0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

devise_token_auth使用時のundefined method `downcase' for nil:NilClassについてまとめる

Last updated at Posted at 2023-05-24

プログラミング初心者の備忘録です。間違いなどがあれば気軽にコメント下さい。

概要

エラーの解決自体はググればすぐ出てきました。

config/initializers/devise_token_auth.rb
# Makes it possible to change the headers names
  config.headers_names = {:'access-token' => 'access-token',
                         :'client' => 'client',
                         :'expiry' => 'expiry',
                         :'uid' => 'uid',
                         :'token-type' => 'token-type',
                         # 追加↓
                         :'authorization' => 'authorization'}

参考URL↓↓↓

内容が気になったので、自分用にまとめてみました。

理由

GitHubのissueに答えがありました。
https://github.com/lynndylanhurley/devise_token_auth/pull/1534

Added Authorization header with bearer token defined in RFC 6750
related issues: #1522 #902 #1487


RFC 6750で定義されたBearerトークンを使用したAuthorizationヘッダを追加した
関連 issue #1522 #902 #1487

とのことで、devise_token_authのバージョン1.2.0から1.2.1になる際にRFC 6750に準拠するためにAuthorizationヘッダを追加したとのことです。

RFCとは

インターネットのさまざまな技術、約束事、コミュニティで共有すべき事柄を記録するための文書データベース。

インターネット技術ををある程度標準化しましょう、っていうことなんですね。

こちらがRFC 6750の日本語訳です。
2.1. Authorizationリクエストヘッダフィールドの項を見てみると

クライアントが署名無しトークンを伴う認証されたリクエストを送信する際には, Bearer HTTP認可スキームを用いたAuthorizationリクエストヘッダフィールドを使用すべきである (SHOULD). リソースサーバはこの方法をサポートしなければならない (MUST).

ここに準拠するためにauthorizationを追加したんですね。

Authorizationヘッダとは

HTTP の Authorization リクエストヘッダーは、ユーザーエージェントがサーバーから認証を受けるための証明書を保持し、ふつうは、必ずではありませんが、サーバーが 401 Unauthorized ステータスと WWW-Authenticate ヘッダーを返した後に使われます。

認証情報をサーバに送るためのものってことね。

なぜエラーになるか?

config/initializers/devise_token_auth.rb
# Makes it possible to change the headers names
  config.headers_names = {:'access-token' => 'access-token',
                         :'client' => 'client',
                         :'expiry' => 'expiry',
                         :'uid' => 'uid',
                         :'token-type' => 'token-type',
                         # 追加↓
                         :'authorization' => 'authorization'}

この設定はヘッダーの名前を変更するものですが、この設定で明示的に指定したヘッダー名以外のものは認証ヘッダーとして認識しなくなります。(そういう用途で使うために:'access-token' => 'access-token'と同じ名前なんですね)
なので、今回authorizationが追加されたので、この設定を使う場合は明示的にauthorizationを指定する必要があるわけです。

まとめ

・devise_token_auth1.2.1のバージョンでRFC 6750に準拠するためにauthorizationというヘッダが追加された。
・authorizationひとつでaccess-token , token-type, client, expiry, uidの情報と同じ働きをする。
・1.2.1のバージョンではaccess-token , token-type, client, expiry, uidのデータとauthorizationが両方送られている。
・config.headers_namesを使う場合は明示的にauthorizationを指定する必要がある。

余談

cookie_enabled: trueにした場合はauthorizationは送信されないそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?