#<Devise::OmniauthCallbacksController:0x007fb5d1741e48>

问题描述 投票:0回答:1

我正在使用 Omniauth-facebook 和 Devise-token-auth 以及 Angular 和 ng-token-auth 作为前端构建 Rails-API。 但是,当我使用 facebook 登录时,出现错误:

undefined local variable or method `flash' for #<Devise::OmniauthCallbacksController:0x007fd027a51e10>

似乎omniauth会自动使用flash中间件,但是rails-api不包含这个中间件,并且我一直未能成功地禁用omniauth中的flash的使用。 我的配置如下:

应用程序.rb:

    require File.expand_path('../boot', __FILE__)

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module PathfinderApi
  class Application < Rails::Application
    config.active_record.raise_in_transactional_callbacks = true


    config.middleware.insert_before 0, "Rack::Cors" do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

    config.api_only = true
    config.middleware.use ActionDispatch::Flash
    config.middleware.use ActionDispatch::Cookies
    config.middleware.use ActionDispatch::Session::CookieStore
  end
end

devise_token_auth.rb:

DeviseTokenAuth.setup do |config|
  Rails.application.secrets.facebook_app_secret
  config.change_headers_on_each_request = true
end

设计.rb:

Devise.setup do |config|
  config.navigational_formats = [:json]
end

omniauth.rb:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook,      ENV['APP_KEY'], ENV['APP_SECRET']
end

我无法通过以下方式禁用闪存错误:

config.navigational_formats = [:json]

并且 devise/omniauth 仍在使用 flash 中间件并抛出错误,任何帮助表示赞赏!

ruby-on-rails devise middleware rails-api omniauth-facebook
1个回答
5
投票

有同样的问题。在设备源代码中搜索“flash”。找到大约17个匹配项,全部使用

set_flash_message!
(带感叹号),除了
failure
中的
OmniauthCallbacksController
方法,它使用
set_flash_message
(不带感叹号)。看看定义我们看到:

p

© www.soinside.com 2019 - 2024. All rights reserved.