FROM CACHE - jp_header
このコミュニティはピアツーピアサポートに移行しました。Shopify サポートは今後、このコミュニティへのサービスを提供いたしません。これからもぜひ、他のマーチャントやパートナーとつながり、サポートし合い、経験を共有してください。 当社の行動規範に違反する行動や削除を希望するコンテンツがありましたら、引き続きご報告ください

Cookieを使用せずにコールバックを受けたときにshop名を取得する方法が知りたいです

解決済

Cookieを使用せずにコールバックを受けたときにshop名を取得する方法が知りたいです

haruyasu
訪問者
2 1 0

現在、Shopify CLIを使用してアプリを開発しております。

■現状

下記コードはshop名をcookieに保存しています。

chromeでアプリ管理画面(router.get('/'))にアクセスしたときに、認証することができずリダイレクトループが発生してしまいます。

  server.use(
    createShopifyAuth({
      async afterAuth(ctx) {
        const { shop, accessToken, scope } = ctx.state.shopify
        ACTIVE_SHOPIFY_SHOPS[shop] = scope

       // sameSiteをnoneに設定すると、chromeでアクセスしたときにリダイレクトループ発生
       // sameSiteをLaxに設定すると、chromeでは問題ないが、safariでは取得できない
        ctx.cookies.set('shopOrigin', shop, {
          httpOnly: false,
          secure: true,
          sameSite: 'none',
        })
        .....
    })
  ) 

 router.get('/', async (ctx) => {
    const shop = ctx.query.shop

    if (ACTIVE_SHOPIFY_SHOPS[shop] === undefined) {
      ctx.redirect(`/auth?shop=${shop}`) // 認証がうまくいかず、ここでリダイレクトループが発生
    } else {
      await handleRequest(ctx)
    }
  })

■やりたいこと

コールバックを受けたときにShop名を取得したい。

cookieを使用せずに、外部からのコールバック(router.get('/callback'))を受けたときに、shop名を取得する方法はありますでしょうか?

cookieを使用すると、chrome、Edge、Safariなどブラウザ毎に挙動が異なるので、困っています。

ぜひアドバイスをよろしくお願い致します。

  router.get('/callback', async (ctx) => {
    const shop = ctx.cookies.get('shopOrigin') // ここでcookieを使用せずshop名を取得したい!
    // const { shop } = ctx.session // これも取得できない
    // const url = new URL(ctx.request.header.referer) // safariでアクセスしたときに取得できない
    ....
  }

 

1 件の受理された解決策

haruyasu
訪問者
2 1 0

成功

クエリパラメータでshop名を渡すように変更しましたので、cookieは使用する必要がなくなりました。

ありがとうございました。

 

元の投稿で解決策を見る

1件の返信1

haruyasu
訪問者
2 1 0

成功

クエリパラメータでshop名を渡すように変更しましたので、cookieは使用する必要がなくなりました。

ありがとうございました。