Понимание процесса аутентификации Shopify App Bridge 2 и shopify_app (Rails 6)

Поэтому, следуя нескольким руководствам и документам Shopify, я пытаюсь перенести встроенное приложение Shopify из сеансов cookie в JWT с помощью AppBridge 2.

Я использую AppBridge для настройки:

       import { getSessionToken } from "@shopify/app-bridge-utils";

 window.app = createApp({
   apiKey: data.apiKey,
   host: data.host,
   forceRedirect: true
});     

в моем коде FrontEnd JS, в результате которого к окну прикрепляется sessionToken:

      window.sessionToken = await getSessionToken(app);

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

Однако мои контроллеры Rails(вызываемые через Ajax) отправляют сообщение 401 Unauthorized , поэтому, очевидно, я аутентифицирован на FrontEnd, но мои глупые контроллеры RoR не знают об этом.

Такие контроллеры (как указано в документации Shopify) наследуются от файла authenticated_controller.rb :

      class AuthenticatedController < ApplicationController
  include ShopifyApp::EnsureAuthenticatedLinks # only JWT
  include ShopifyApp::Authenticated

end

Я вижу, что класс ShopifyApp::Authenticate (из драгоценного камня shopify_app ) использует библиотеку:

      /lib/shopify_app/controller_concerns/login_protection.rb#L100

с помощью метода:

       def jwt_shopify_domain
   request.env['jwt.shopify_domain']
 end 

Итак, код JavaScript в интерфейсе:

       window.sessionToken = await getSessionToken(app) 

устанавливает значение для 'jwt.shopify_domain', которое будет считаться (считываться) для внутреннего кода? или откуда берется значение jwt.shopify_domain?

Также заметил, что маршрут:

      auth_shopify_callback GET  /auth/shopify/callback(.:format)  shopify_app/callback#callback

все еще существует, как этот маршрут связан с AppBridge? Раньше я использовал этот маршрут для ручной настройки сеанса файлов cookie, следует ли мне его использовать?

В итоге: как код rails на бэкэнде «знает», что AppBridge получил действительный sessionToken во FrontEnd?

0 ответов

Другие вопросы по тегам