2017-11-29 11 views
1

enter image description here私はShopify用のアプリケーションを開発しています。現在開発中です。これまで、私は正常にアプリケーションを認証し、埋め込みApp SDKを使用して管理ページにリダイレクトすることに成功しました。しかし、私が管理者ページに戻ったとき、それは私にRequest origin cannot be verifiedと言うエラーを与える。要求元を確認できません - Shopify

コンソールはコンソールにFailed to load resource: the server responded with a status of 403 (Forbidden) URLを示し、このhttps://myshop.myshopify.com/admin/apps/dfdjf4343343434343434bfdf/shopify/shopify/callback?code=ffdfdffd&hmac=fdfdfdfdfdfdfdfdfddfdfdfdfdf&shop=myshop.myshopify.com&state=151193864548800&timestamp=1511938648

のようなものであるfdfdfdfdfdfdfdfdfddfdfdfdfdfは、私が代わりにハッシュを交換してきただけでランダムな文字列です。参考までに - 画像からアプリ名とユーザープロフィールの名前とアバターを削除しました。これが原因で起こっている

答えて

1

、あなたが状態を一致させることができないリダイレクトURLに対応しながら、そのは、クッキーに設定されている

const ShopifyToken = require('shopify-token') 
 

 
const forwardingAddress = process.env.HOST 
 

 
const shopifyToken = new ShopifyToken({ 
 
    sharedSecret: process.env.SHOPIFY_API_SECRET, 
 
    redirectUri: forwardingAddress + '/shopify/callback', 
 
    apiKey: process.env.SHOPIFY_API_KEY 
 
}) 
 

 

 
const shopify = { 
 
    // use this for authentication 
 
    auth: (req, res, next) => { 
 
    const shop = req.query.shop 
 
    if (!shop) { 
 
     return res.status(400).send('Missing shop parameter. Please add ?shop=your-development-shop.myshopify.com to your request') 
 
    } 
 
    const shopRegex = /^([\w-]+)\.myshopify\.com/i 
 
    const shopName = shopRegex.exec(shop)[1] 
 
    const state = shopifyToken.generateNonce() 
 
    const url = shopifyToken.generateAuthUrl(shopName, scopes, state) 
 
    res.cookie('state', state) 
 
    res.redirect(url) 
 
    }, 
 

 
    // use this as your callback function 
 
    authCallback: async (req, res) => { 
 
    const { shop, hmac, code, state } = req.query 
 
    const stateCookie = cookie.parse(req.headers.cookie).state 
 
    if (state !== stateCookie) { 
 
    // you are unable to set proper state ("nonce") in this case, thus you are getting this error 
 
     return res.status(403).send('Request origin cannot be verified') 
 
    } 
 
    if (!shop || !hmac || !code) { 
 
     res.status(400).send('Required parameters missing') 
 
    } 
 
    let hmacVerified = shopifyToken.verifyHmac(req.query) 
 
    console.log(`verifying -> ${hmacVerified}`) 
 
    // DONE: Validate request is from Shopify 
 
    if (!hmacVerified) { 
 
     return res.status(400).send('HMAC validation failed') 
 
    } 
 
    const accessToken = await shopifyToken.getAccessToken(shop, code) 
 
    const shopRequestUrl = 'https://' + shop + '/admin/shop.json' 
 
    const shopRequestHeaders = { 
 
     'X-Shopify-Access-Token': accessToken 
 
    } 
 
    try { 
 
     const shopResponse = await request.get(shopRequestUrl, { headers: shopRequestHeaders }) 
 
     res.status(200).end(shopResponse) 
 
    } catch (error) { 
 
     res.status(error.statusCode).send(error.error.error_description) 
 
    } 
 
    } 
 
}

関連する問題