【发布时间】:2014-06-02 15:15:06
【问题描述】:
我正在使用 gem omniauth-shopify-oauth2 连接到 Shopify 的 API。
在config/initializers/shopify.rb 我正在设置我的OmniAuth::Builder 像这样:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :shopify, "my_shopify_api_key", "my_shopify_secret",
scope: 'read_orders',
setup: lambda { |env| params = Rack::Utils.parse_query(env['QUERY_STRING'])
env['omniauth.strategy'].options[:client_options][:site] = "http://#{params['shop']}" }
end
然后我可以从任何控制器文件访问 Shopify 的 API,如下所示:
omniauth = request.env['omniauth.auth']
if omniauth && omniauth[:provider] && omniauth[:provider] == "shopify"
token = omniauth['credentials'].token
session = ShopifyAPI::Session.new("#{username}.myshopify.com", token)
ShopifyAPI::Base.activate_session(session)
# Do stuff with the session
ShopifyAPI::Base.clear_session
end
另一方面,如果我将控制器功能移动到例如app/my_custom_folder/my_custom_file.rb我在第一行代码中遇到错误:
NameError (undefined local variable or method `request' for #<MyCustomClass:0x007fe07ec11f68>):
我假设引发错误是因为我的自定义类和文件无法访问中间件功能。那么如何扩展功能呢?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 middleware