Далее js - api routes, как убрать повар ie из шапки? - PullRequest
0 голосов
/ 30 мая 2020

У меня есть два маршрута API, которые я хочу установить два файла cookie в /api/login.js и удалить их в /api/logout.js.

, так что это мой API входа в систему:

import { serialize } from 'cookie';

export default async (req, res) => {
  res.setHeader('Set-Cookie', [
    serialize('mytoken1', 'mytoken1Value', {
      path: '/',
    }),
    serialize('mytoken2', 'mytoken2Value', {
      path: '/',
    }),
  ]);

  res.writeHead(302, { Location: '/' });
  res.end();
}

и это мой API выхода из системы:

export default async (req, res) => {
  res.removeHeader('Set-Cookie')

  res.writeHead(302, { Location: '/api/login' });
  res.end();
}

, но выход из системы не удаляет файлы cookie, поэтому я все еще могу видеть их в _app. js --- console.log (req .headers.cook ie) --- когда я перезагружаю страницу. Вы знаете, как убрать повар ie в этой ситуации?

Ответы [ 2 ]

0 голосов
/ 14 июня 2020

Сделать это можно так:

res.setHeader('Set-Cookie', 'mytoken1=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT');
res.setHeader('Set-Cookie', 'mytoken2=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT');

Источник

UPD

src/pages/api/auth/signout.ts

import { NextApiHandler } from 'next';
import { NotFoundError } from 'errors/not-found-error';
import { errorHandler } from 'middlewares/error-handler';

const routeHandler: NextApiHandler = (req, res) => {
  if (req.method === 'POST') {
    res.setHeader('Set-Cookie', 'jwt=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT');
    res.send({});
  } else {
    throw new NotFoundError();
  }
};

export default errorHandler(routeHandler);
0 голосов
/ 30 мая 2020

Итак, после того, как я усложнил слишком много проблем с каждым решением, я пришел к этому, и он отлично работает:

(у меня было несколько файлов cookie, и мне пришлось использовать методы nodejs, потому что я кодировал next js API-маршруты без промежуточного программного обеспечения)

export default async (req, res) => {
  /* remove cookies from request header */
  res.setHeader('Set-Cookie', [
    serialize('mytoken1', '', {
      maxAge: -1,
      path: '/',
    }),
    serialize('mytoken2', '', {
      maxAge: -1,
      path: '/',
    }),
  ]);

  res.writeHead(302, { Location: '/api/login' });
  res.end();
}

Дело было в maxAge, который должен быть -1, чтобы срок его действия истек. Я пробовал это с помощью Date.now (). А когда у вас есть несколько файлов cookie, вы должны завершить ответ после манипуляции с ними обоими.

...