Liquid、JavaScriptなどに関する質問
現在、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でアクセスしたときに取得できない
....
}
解決済! ベストソリューションを見る。
成功
クエリパラメータでshop名を渡すように変更しましたので、cookieは使用する必要がなくなりました。
ありがとうございました。
Shopifyペイメント決済サービスを利用していて、ストアの管理画面の通知セクションに突然「Shopifyペイメントの使用を継続するために必要な情報」というバナーメッセージが表示さ...
By Mirai Dec 3, 2023すべてのShopifyアカウントはデフォルトではmyshopify.comのURLと関連付けられており、これはアカウント設定時に使用したビジネス名に基づいて作成されます。しかし、オ...
By Nina_13 Nov 26, 2023このトピックは英語版コミュニティの投稿:Shopify Web Pixel Manager Sandbox FAQの日本翻訳です。
By Mirai Nov 19, 2023