プログラミング初心者の備忘録です。間違いなどがあれば気軽にコメント下さい。
概要
エラーの解決自体はググればすぐ出てきました。
# 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 ヘッダーを返した後に使われます。
認証情報をサーバに送るためのものってことね。
なぜエラーになるか?
# 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は送信されないそうです。