Утверждение Shopify требует немедленной авторизации без перенаправления — Не вижу, как получить динамический URL в настройках URL-адреса приложения

#shopify #shopify-app #shopify-api

#Shopify #Shopify-приложение #Shopify-api

Вопрос:

Мой вопрос / проблема очень похожа на этот вопрос в теме: https://community.shopify.com/c/shopify-apis-and-sdks/app-approval-issues-app-must-install-succesful… Однако, похоже, на этот вопрос нет ответа. Я также думаю, что он основан на встроенном приложении Shopify, а мое — это отдельное приложение shopify (хотя оно имеет поведение по умолчанию для встраивания).

Я проверил свое приложение, но оно было отклонено, потому что сначала оно переходит в мое автономное приложение Shopify, а затем приложение перенаправляет на вход oauth, если он не установлен, или на домашнюю страницу, если они установлены.

Вот короткий скринкаст, показывающий «установить приложение», который попадает на целевую страницу автономного приложения, а затем перенаправляется на страницу установки: https://drive.google.com/file/d/18jUb9r_VkJZqldJSoJqKVBFxWVIr4XvF/view?usp=sharing

И вот что у меня есть для URL-адреса приложения: введите описание изображения здесь

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

Я не понимаю, как я могу «немедленно» перейти к «https://example.myshopify.com/admin/oauth/request_grant «ЕСЛИ я не знаю названия магазина?! Я должен получить эту информацию из параметров url, когда они попадают на мою страницу. вот почему я делаю перенаправление ПОСЛЕ того, как узнаю, есть ли у меня параметр shop и т. Д.

Порядок событий в моем коде. Использование интерфейса reactjs с вызовами axios для экспресс-серверной части.

Интерфейс:

-перейдите на страницу shopify_login_page и при загрузке страницы запускает эту функцию:

 const checkShopParam = async () => {
        
        const url = window.location
        const shop = new URLSearchParams(url.search).get('shop');
        console.log("shop: ", shop);
        setInstallShop(shop)

        axios.get(`${SHOPIFY_HOST}/foo?shopName=`   installShop)
            .then(response => {
                console.log(response);
                // setAuthRoute(response.data)
                if(installShop){
                    // setTimeout(() => window.open(response.data), 50);
                    setTimeout(() => window.location.replace(response.data), 50);
                    console.log('install');
                }
                else{
                    setTimeout(() => window.location.replace(HOST), 50);
                    console.log('redirect to home page');
                }
                
                
                // response.render("usersRoutes", { Users: Users });
            })
            .catch(console.log("Error with shopify login func"));
    }
 

Серверная часть:

-серверный маршрут принимает название магазина и создает ссылку авторизации, которую он отправляет в качестве ответа:

 app.get('/foo', async (req, res) => {
    const shopName = req.query.shopName
    console.log('shop name: ', shopName);
    let authRoute = await Shopify.default.Auth.beginAuth(
      req,
      res,
      shopName,
      // SHOP,
      '/auth/callback',
      true,
    );
    console.log(authRoute);
    res.send(authRoute)
  }); 
 

Любая помощь будет с благодарностью принята. Дайте мне знать, если вам нужна более подробная информация

Ответ №1:

понял это. приходилось выполнять все перенаправления из серверной части express, а не из интерфейса reactjs. имеет смысл

экспресс-маршрут:

   app.get("/install", async (req, res) => {
    const shopName = req.query.shop
    console.log("shop name: ", shopName)

    let authRoute = await Shopify.default.Auth.beginAuth(
      req,
      res,
      shopName,
      // SHOP,
      '/auth/callback',
      true,
    );
    console.log(authRoute);
    return res.redirect(authRoute)


  })