LoginSignup
6
2

More than 3 years have passed since last update.

RailsのAPIモードをCookie(session)認証に対応させる

Posted at

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を利用する方法で良い方法があれば教えて下さい :bow:

application_controller.rb (APIの基底のcontroller)

class ApplicationController < ActionController::API
  include ActionController::Cookies #<- これを追加

ActionController::API を継承して作る場合はこの設定も必要だった。

クライアント側

axios(ajaxライブラリ)

  axios.create({
    withCredentials: true,
    //...
  })

axios違うドメインCookieを送る機能だが、これ有効しないとsession cookieが使えなかった。

6
2
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
6
2