Shopify OAuth2 - пользовательские области для магазина - PullRequest
0 голосов
/ 15 мая 2019

Я использую Ruby on Rails и подключаюсь к API-интерфейсу Shopify REST в моем приложении для получения информации о магазинах. Мы используем гем Shopify OAuth2, который обрабатывает области аутентификации и доступа для API, используя промежуточное ПО OmniAuth:

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :shopify,
      ENV["SHOPIFY_API_KEY"],
      ENV["SHOPIFY_API_SECRET"],
      scope: 'read_orders,read_products',
      setup: lambda { |env|
        strategy = env['omniauth.strategy']
        shopify_auth_params = Rack::Utils.parse_query(env['QUERY_STRING'])
        shop = if shopify_auth_params.present?
          "https://#{shopify_auth_params['shop']}"
        else
          ''
        end
        strategy.options[:client_options][:site] = shop
      }
end

Я хочу изменить, какие области отправляются в Shopify во время аутентификации, поэтому некоторые магазины получают один набор областей, а другой - другой. Например, некоторые магазины будут запрашивать области:

read_orders, read_products

Пока другой магазин запрашивает:

read_orders, read_products, read_inventory

Причина этого заключается в том, что пользователи могут сами выбирать, когда они хотели бы обновить приложение, а не вынуждены делать это при изменении областей, необходимых приложению.

Как я могу передавать дополнительную информацию динамически?

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Я решил эту проблему, выполнив следующие действия по этому вопросу GitHub: https://github.com/Shopify/omniauth-shopify-oauth2/issues/60

Вы можете динамически передавать области через сеанс и устанавливать его в блоке настройки OmniAuth:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :shopify,
    ShopifyApp.configuration.api_key,
    ShopifyApp.configuration.secret,
    setup: lambda { |env|
      strategy = env['omniauth.strategy']
      session = strategy.session.with_indifferent_access
      env['omniauth.strategy'].options[:scope] = session['shopify.oauth.scope']
      ...

}
0 голосов
/ 15 мая 2019

Может быть, разумнее думать об этом другими словами. Вы, вероятно, не хотите использовать области в мире дифференциации вашего приложения. Вместо этого вы сосредоточитесь на фактической функциональности, предоставляемой продавцу. Плати больше, получай больше. Поэтому, когда вы устанавливаете приложение, чтобы сделать вашу жизнь проще, у вас есть один набор возможностей для всех установок. Вы избегаете страшного модального всплывающего окна, запрашивающего новые области позднее, что может привести к путанице и удалению.

Даже если приложение с самым ограниченным доступом имеет максимальную область действия, продавец не может ничего с этим поделать, если вы спроектировали свое приложение так, чтобы ограничить его функциональность. Так что вы можете захотеть встроить в свое приложение именно это. Вы решаете, что приложение предоставляет, проверяя текущий тарифный план, за который они платят, вместо того, чтобы беспокоиться о масштабах.

TL: DR; использование области действия для определения того, что делает ваше приложение, - плохая идея.

...