LoginSignup
0
0

More than 3 years have passed since last update.

RailsのAPIモードでOAuth(Facebook)認証を使うときはSessionを有効にする必要がある

Last updated at Posted at 2019-09-05

RailsAPIモードでFacebook認証を実装する場合、sessionを有効にする必要があります。
sessionを有効にしていなければ(OmniAuthを使っている場合)OmniAuth::NoSessionErrorが発生します。

現在のRailsアプリケーションに適応されているmiddlewareを確認してみましょう。

$ bundle exec rails middleware

use Rack::Cors
use Rack::Sendfile
use ActionDispatch::Static
use ActionDispatch::Executor
use ActiveSupport::Cache::Strategy::LocalCache::Middleware
use Rack::Runtime
use ActionDispatch::RequestId
use ActionDispatch::RemoteIp
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::Reloader
use ActionDispatch::Callbacks
use ActiveRecord::Migration::CheckPending
use Rack::Head
use Rack::ConditionalGet
use Rack::ETag
use Warden::Manager
use OmniAuth::Strategies::Facebook
run Backend::Application.routes

session等のmiddlewareは未適応ですので、session用のmiddlewareを追加します。

config/application.rb
config.middleware.insert_after(ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies)
config.middleware.insert_after(ActionDispatch::Cookies, ActionDispatch::Session::CookieStore)

config.middleware.insert_afterとは、第一引数middlewareの後に第二引数middlewareを追加するメソッドです。
ActionDispatch::CookiesActiveRecord::Migration::CheckPendingの後に挿入しているのは、Railsの新規プロジェクトに追加されているミドルウェアの一覧を参考にしてデフォルトの順番に準拠したためです。

これで正常にfacebook認証が行われます。

参考

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