onecareer内のアプリ(Vue.js + RailsのAPIモード)の認証方式をtoken認証からsession(cookie)に変更した時の変更点をまとめる
これを始めた理由
既存のWebアプリからシームレスにログインさせる要件が発生したため
- 普通のwebアプリで実装された画面でログインしたユーザーを、SPAで作られた画面にシームレスにログインさせるには
- OAuthサーバーを作るか
- Cookie(Session)の認証を利用する必要がある。
今回は納期優先でsession認証に変更
Cookie認証に必要だったもの
### サーバー側
config/application.rb
# Only loads a smaller set of middleware suitable for API only apps.
# Middleware like session, flash, cookies can be added back manually.
# Skip views, helpers and assets when generating a new resource.
config.api_only = false # <- false を true に変更
session storeをcookieにする場合は config.api_only = true
にした上で必要なmiddle wearを読み込む方法で実現出来たが、それはそれで
- Deviseと相性が悪い。
- Deviseを使うとsessionに多くの情報が乗るのでCookieには入り切らない。
- 既存のWebアプリがsession storeをredisにしているのでそれを利用したい。
上記の制約により、api_onlyをfalseにする方にした。
(api_only=trueかつ deviseを利用する方法で良い方法があれば教えて下さい )
application_controller.rb (APIの基底のcontroller)
class ApplicationController < ActionController::API
include ActionController::Cookies #<- これを追加
ActionController::API を継承して作る場合はこの設定も必要だった。
クライアント側
axios(ajaxライブラリ)
axios.create({
withCredentials: true,
//...
})
axios違うドメインCookieを送る機能だが、これ有効しないとsession cookieが使えなかった。