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::Cookies
をActiveRecord::Migration::CheckPending
の後に挿入しているのは、Railsの新規プロジェクトに追加されているミドルウェアの一覧を参考にしてデフォルトの順番に準拠したためです。
これで正常にfacebook認証が行われます。