我正在使用Omniauth-facebook和Devise-token-auth构建一个Rails-API,前端使用Angular和ng-token-auth,但是当我使用facebook登录时,出现了错误:
undefined local variable or method `flash' for #<Devise::OmniauthCallbacksController:0x007fd027a51e10>
看起来omniauth自动使用flash中间件,但是rails-api没有包含这个,而且我一直没有成功地禁用omniauth使用flash。我的配置如下:
application.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
设备_令牌_授权.rb:
DeviseTokenAuth.setup do |config|
Rails.application.secrets.facebook_app_secret
config.change_headers_on_each_request = true
end
devise.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中间件并抛出错误,任何帮助都很感激!
3条答案
按热度按时间qni6mghb1#
遇到了同样的问题。搜索了device源代码中的"flash"。找到了大约17个匹配项,都使用
set_flash_message!
(带感叹号),除了OmniauthCallbacksController
中的failure
方法,它使用set_flash_message
(不带感叹号)。查看定义,我们可以看到:实际的flash消息是在没有感叹号的方法中生成的(我会用相反的方式来探测它...)。缺少感叹号是其他解决方案中提到的设置
navigational_formats
在这里不起作用的原因。OmniauthCallbacksController
中的failure
方法。在初始化程序中执行此操作,例如在eivnm1vs2#
在Rails(5.0.0.1)+设计令牌授权(0.1.39)中也有同样的问题。
除了@Koen的回答中的覆盖之外,在我的例子中还需要添加以下内容:
huwehgph3#
我设法解决这个问题,添加到device.rb配置:
第一个月
这样设计就不会尝试使用闪存,也不会抛出500错误。