うちのいぬ Tech Blog

Tech Blog of Uchinoinu/My dog

When you want to use url with locale, OAuth using Devise & OmniAuth has error at callback. How to resolve?

Edit config/routes.rb, set only ominauth_callbacks outside of scope of locale.

Rails.application.routes.draw do
  devise_for :users,
  skip: [
    :session,
    :password,
    :registration,
    :confirmation
  ],
  controllers: {
    omniauth_callbacks: 'users/omniauth_callbacks'
  }

  scope '(:locale)', locale: /en/ do
    get 'omniauth/:provider' => 'users/omniauth#localized', as: :localized_omniauth
    devise_for :users,
    skip: :omniauth_callbacks,
    controllers: {
      sessions:            'users/sessions',
      registrations:       'users/registrations',
      passwords:           'users/passwords',
      confirmations:       'users/confirmations'
    }
end