This is my server.js file:
require('isomorphic-fetch');
const dotenv = require('dotenv');
const Koa = require('koa');
const next = require('next');
const { default: createShopifyAuth } = require('@shopify/koa-shopify-auth');
const { verifyRequest } = require('@shopify/koa-shopify-auth');
const session = require('koa-session');
const cors = require('@koa/cors');
const bodyParser = require('koa-bodyparser');
const { router } = require('./server/routes.js');
dotenv.config();
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
const { SHOPIFY_API_SECRET_KEY, SHOPIFY_API_KEY } = process.env;
app.prepare().then(() => {
const server = new Koa();
server.proxy = true;
server.use(session({ secure: true, sameSite: 'none' }, server));
server.keys = [SHOPIFY_API_SECRET_KEY];
server.use(async (ctx, next) => {
try {
await next();
} catch (err) {
console.log(`${ctx.method} ${ctx.url}`);
console.log(err);
}
});
server.use(
createShopifyAuth({
apiKey: SHOPIFY_API_KEY,
secret: SHOPIFY_API_SECRET_KEY,
scopes: ['read_themes', 'write_themes'],
afterAuth(ctx) {
const { shop, accessToken } = ctx.session;
ctx.cookies.set('accessToken', accessToken, {
httpOnly: false,
secure: true,
sameSite: 'none',
});
ctx.cookies.set('shopOrigin', shop, {
httpOnly: false,
secure: true,
sameSite: 'none',
});
ctx.redirect('/');
},
}),
);
server.use(bodyParser());
server.use(router.routes());
server.use(router.allowedMethods());
server.use(verifyRequest());
server.use(cors());
server.use(async (ctx) => {
await handle(ctx.req, ctx.res);
ctx.respond = false;
ctx.res.statusCode = 200;
});
server.listen(port, () => {
console.log(`> Ready on http://localhost:${port}`);
});
});
As you guys can see Iâm setting:
server.use(session({ secure: true, sameSite: 'none' }, server));
ctx.cookies.set('accessToken', accessToken, {
httpOnly: false,
secure: true,
sameSite: 'none',
});
ctx.cookies.set('shopOrigin', shop, {
httpOnly: false,
secure: true,
sameSite: 'none',
});
But it still doesnât work and the Shopify reviewer wonât let my app be approved because of this.
This is the list of dependencies, all bleeding edge:
"dependencies": {
"@koa/cors": "^3.0.0",
"@shopify/app-bridge-react": "^1.19.0",
"@shopify/koa-shopify-auth": "^3.1.63",
"@shopify/polaris": "^4.16.0",
"@zeit/next-css": "^1.0.1",
"babel-eslint": "^10.1.0",
"dotenv": "^8.2.0",
"isomorphic-fetch": "^2.2.1",
"js-cookie": "^2.2.1",
"koa": "^2.11.0",
"koa-bodyparser": "^4.3.0",
"koa-router": "^9.0.1",
"koa-session": "^6.0.0",
"next": "^9.4.4",
"react": "^16.13.0",
"react-dom": "^16.13.0",
"webpack": "^4.42.1"
},
I donât know what else I can do to fix this problem.