错误:appbridgeError:APP :: ERROR :: INVALID_CONFIG:必须提供shopOrigin

时间:2020-09-11 20:12:31

标签: javascript node.js reactjs cookies shopify

我使用Koa,Nextjs tho制作了Shopify应用,但出现此错误

appbridgeError: APP::ERROR::INVALID_CONFIG: shopOrigin must be provided

应用行为有点奇怪,因为当我第一次访问时,它运行良好。 但是,几个小时后,我得到了这个错误。然后我研究了这个问题,找到了案例。几个小时后,MyApp类中的Cookies.get("shopOrigin")将为空。

[server.js的代码部分]

....................
....................

app.prepare()
.then(() => {
  var httpServer = http.createServer(serverCallback);
  // var httpsServer = https.createServer(config.https.options, serverCallback);

  server.use(session({ secure: true, sameSite: 'none' }, server));
  server.keys = [SHOPIFY_API_SECRET_KEY];
  server.use(
    createShopifyAuth({
      apiKey: SHOPIFY_API_KEY,
      secret: SHOPIFY_API_SECRET_KEY,
      scopes: [
        'read_products','write_products',
        'read_orders', 'write_orders',
        'read_customers', 'write_customers',
        'read_script_tags', 'write_script_tags'
      ],
      afterAuth(ctx) {
        const { shop, accessToken } = ctx.session;

        ACCESS_TOKEN = accessToken

        ctx.cookies.set('shopOrigin', shop, {
          httpOnly: false,
          secure: true,
          sameSite: 'none',
        });
        ctx.redirect('/');
      },
    }),
  );

  server.use(graphQLProxy({version: ApiVersion.October19}))
  server.use(verifyRequest());
  server.use(async (ctx) => {
    await handle(ctx.req, ctx.res);
    ctx.respond = false;
    ctx.res.statusCode = 200;
    return
  });
....................
....................

[_ app.js]

....................
....................

class MyApp extends App {
  render() {
    const { Component, pageProps } = this.props;
    const config = { apiKey: API_KEY, shopOrigin: Cookies.get("shopOrigin"), forceRedirect: true };
    console.log(`config`)
    console.log(config)
    return (
      <React.Fragment>
        <Head>
          <title>My LA Meats</title>
          <meta charSet="utf-8" />
        </Head>
       <Provider config={config}>
          <AppProvider i18n={translations}>
            <ApolloProvider client={client}>
              <Component {...pageProps} />
            </ApolloProvider>
          </AppProvider>
        </Provider>
      </React.Fragment>
    );
  }
}
....................
....................

我想这是cookie的问题,我无法确认。你们有同样的问题吗?如果您知道我应该如何解决此问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

更改0行代码后,我遇到了完全相同的错误,这似乎是由于shopOrigin cookie是HttpOnly引起的。为了确认这一点,我将尝试在控制台中运行类似document.cookie的程序,并查看shopOrigin cookie是否显示。

在我的情况下,该cookie在chrome和firefox中可见,一旦取消了shopOrigin cookie的HttpOnly列,便能够加载我的应用程序。但是,这是一个临时修复程序,因为在chrome重新启动后,cookie会重置为HttpOnly。这令人困惑,因为server.js中的createShopifyAuth()函数显式创建了cookie,因此它不是HttpOnly。

如果找到解决方法,请告诉我。