Koa. js: ctx.setcook ie () не может установить cookie - PullRequest
0 голосов
/ 06 февраля 2020

В моем коде server.js ниже я настраиваю промежуточное ПО, которое должно пройти через Shopify OAuth, а затем перенаправить на маршрут /.

Маршрут '/' и его URL-адрес перенаправления загружаются в iframe внутри области администратора магазина. Я вижу страницу, на которую / перенаправляет. Но никаких файлов cookie нет.

В связи с настройками cook ie, я получаю доступ к этому маршруту в веб-браузере и по защищенному соединению https.

Я использую Google Chrome Версия 79.0.3945.88 (Официальная сборка) (64-битная). Я также использую расширение браузера EditThisCookie для просмотра файлов cookie, присутствующих в домене.

Кто-нибудь может сказать, почему файлы cookie, которые я пытаюсь установить в server.js, не устанавливаются?

import "isomorphic-fetch";
require("dotenv").config();

import Koa from "koa";
import Router from "koa-router";
import session from "koa-session";
import authorizeForShopify, {verifyRequest} from "@shopify/koa-shopify-auth";

const koa = new Koa();
const router = new Router();

const {SHOPIFY_BUYUSED_API_KEY, SHOPIFY_BUYUSED_API_SECRET, SHOPIFY_BUYUSED_SCOPES} = process.env;

koa.keys = [SHOPIFY_BUYUSED_API_SECRET];
koa.use(session({secure: true, sameSite: "none"}, koa));


////// Shopify OAuth //////
koa.use(authorizeForShopify({
  apiKey : SHOPIFY_BUYUSED_API_KEY
  , secret : SHOPIFY_BUYUSED_API_SECRET
  , scopes : SHOPIFY_BUYUSED_SCOPES.split(",")
  , afterAuth(ctx: Koa.Context): void {
    console.log(`=====inside afterAuth()=====`); // I don't see this log statement
    const {shop, accessToken} = ctx.session;

    console.log({ // also I do not see this one
      message : "from inside afterAuth()"
      , shop
      , accessToken
    });

    // cookie setting
    const cookieOptions = { 
      httpOnly: true,
      secure: true,
      signed: true,
      overwrite: true
    };

    // neither cookie is present in EditThisCookie
    ctx.cookie.set("buyUsed_shopName", shop, cookieOptions);
    ctx.cookie.set("buyUsed_generalToken", accessToken, cookieOptions);


    ctx.redirect("/");
  }
}));


////// Routing //////

router.get('/', async ctx => {
  // ctx.body = "Koa server running, '/' route triggered"
  ctx.redirect("https://storage.cloud.google.com/buy_used/consoleLog.js");
});


koa.use(verifyRequest());

koa.use(router.routes())
  .use(router.allowedMethods());

const port: number = Number(process.env.PORT) || 8080;

koa.listen(port, undefined, undefined, () => console.log(`=====Koa listening on port ${port.toString()}=====`));


1 Ответ

0 голосов
/ 17 февраля 2020

В случае с Koa методы работы с cookie-файлами: ctx.cookies.get и ctx.cookies.set. Таким образом, строки должны быть изменены на:

// neither cookie is present in EditThisCookie
ctx.cookies.set("buyUsed_shopName", shop, cookieOptions);
ctx.cookies.set("buyUsed_generalToken", accessToken, cookieOptions);
...