Не знаете о ситуациях, когда Shopify отправляет клиента на указанный вами `` URL-адрес приложения ''

Я разработал пару пользовательских приложений Shopify для людей, использующих node.js, и, честно говоря, это было много проб и ошибок. Этот метод проб и ошибок привел меня к следующему коду:

/* GET home page. */
router.get('/', adminMiddleware, function (req, res, next) {
    const shop = req.query.shop;

    if (req.query.session) {
        // if we're here, that means the app was clicked on in the shopify admin panel
        return res.send({hello: 'world'});
    }

    if (shop) {
        // if we're here, that means this is install initialization
        const state = nonce();
        const redirectUri = forwardingAddress + '/shopify/callback';
        const installUrl = 'https://' + shop +
            '/admin/oauth/authorize?client_id=' + apiKey +
            '&scope=' + scopes +
            '&state=' + state +
            '&redirect_uri=' + redirectUri;

        res.cookie('state', state);
        res.redirect(installUrl);
    } else {
        return res.status(400).send('Missing shop parameter. Please add ?shop=your-development-shop.myshopify.com to your request');
    }
});

Итак, согласно моим методам проб и ошибок, в которых я совершенно не уверен, я окажусь в корне моих маршрутов Shopify (как определено в настройке URL-адреса приложения на панели инструментов партнера Shopify) в двух сценариях:

  1. когда кто-то устанавливает приложение, и в этом случае я буду ожидать shop в параметрах запроса, или

  2. когда кто-то нажимает на мое приложение в своей панели администратора магазина Shopify, и в этом случае будет установлена ​​переменная req.query.session, и я могу ответить, я думаю, с помощью некоторого html + css, если я хочу (пример просто показывает простой ответ JSON ).

Но ... это правда? Это два сценария, в которых Shopify будет использовать мой корневой маршрут? И является ли проверка req.query.shop или req.query.session правильным способом различить эти два обстоятельства? Я не уверен, что справляюсь с этим должным образом.


person TKoL    schedule 11.12.2020    source источник


Ответы (1)


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

Сначала я рекомендую использовать настройку shopify-cli здесь https://shopify.github.io/shopify-app-cli/ он предоставляет стартовый набор приложений Shopify, написанный на NextJS и Node (он использует KOA, в него включен GraphQL и некоторые другие предустановленные вещи для вас), в котором есть все промежуточное ПО для аутентификации, сделанное для вас . Я использовал собственный экспресс, но поскольку поддержка важного пакета auth express была прекращена, я переключился на koa, а затем на их настройку. Так что да, я рекомендую пойти с их настройкой.

Что касается вашего вопроса, это действительно зависит от того, что настроено для вашего маршрута.

Shopify может отправить несколько разных запросов в зависимости от типа вашего приложения (пользовательского или общедоступного) и наличия прокси-сервера.

Вот все возможные запросы, которые вы можете получить (или те, с которыми я работал):

  • первоначальная установка - этот запрос включает несколько конечных точек, одну для генерации URL, другую для проверки обратного вызова.
  • введите приложение - я не уверен, может ли этот запрос исключить сеанс, в текущей настройке настроен сеанс, поэтому я предполагаю, что его можно не включать
  • запрос прокси - если вы настроили прокси на панели инструментов своего приложения, и это конечный маршрут.
  • запрос веб-перехватчика - если вы регистрируете веб-перехватчик, и это ваши конечные точки.
  • Веб-перехватчики GDPR - настраиваются на панели управления и требуются для общедоступных приложений (но работают аналогично веб-перехватчикам).

Это действительно зависит от того, как настроено ваше приложение, вы можете иметь все 5 запросов по одному и тому же маршруту (что является плохой идеей) или один, если вам не нужна даже панель инструментов для приложения.

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

Если вы работаете с Koa, я думаю, что этот пакет поможет вам гораздо больше https://www.npmjs.com/package/@shopify/koa-shopify-auth, поскольку он поддерживается Shopify.

Кроме того, я не вижу, чтобы вы обрабатывали параметр запроса shop, который может привести к XSS-атакам на вашей стороне, рассмотрите возможность его дезинфекции перед выводом в URL-адресе установки.

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

person drip    schedule 11.12.2020