1
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.

Railsでエンドポイントを立てるときに沼った話

Posted at

railsをエンドポイントを作成をしていて沼ったところと、どうやってそれを解決したのかを残しておきます
沼ったポイントとしてはrailsのcorsの設定です

railsのcorsの設定

どこで沼ったのか

オリジン間リソース共有 (Cross-Origin Resource Sharing, CORS)において、Rails APIではrack-corsというgemを使用していました。
CORSについての詳しい知識はありませんでしたが、

  • 許可をしたいAPIを叩く側のドメイン
  • 許可をしたいリソースファイル
  • 許可をしたいHTTPヘッダー
  • 許可をしたいHTTPメソッド
    を設定する必要があるということは認識していました。

便利なgemに感謝しつつフロントエンドの実装を進めていたところ、ログイン用のAPIを叩いたときにsession idがcookieに保管されていないことに気がつきました。

どうすれば良かったのか

こちらの記事によると、どうやらcredentials: trueという設定をしないとレスポンスのSet-CookieにCookieがセットされないため、フロントがCookieの取得ができないそうです。
よって./config/initializers/cors.rbは下記のようになります。

Rails.application.config.middleware.insert_before 0, Rack::Cors do
    allow do
        origins(['localhost', /localhost:\d+\Z/, /(.+).local.example-dev.com\Z/])
        resource '*',
            headers: :any,
            methods: [:get, :post, :put, :patch, :delete, :options, :head],
            credentials: true
    end
end

credentials: trueの部分を記述していないがために数時間も溶かしてしまいました...

また、railsではありませんが、フロント側でも自身のドメインのCookie値を設定するためにwithCredentialstrueにする必要があるそうです。(ここに書いてあった。

CORSについて全く理解ができていないなと反省しました...
セキュリティに関する知識がないといつかやらかす気がするのでしっかり勉強しようと思います。

1
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
1
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?