Далее, как я могу получить доступ к токену JWT из файла cookie, который я настраиваю в своем приложении NestJS?

Я уже давно застрял в этой проблеме: Я пытаюсь установить файл cookie только для http в своем бэкэнде Nest, чтобы хранить токен jwt, к которому я позже смогу получить доступ в своем клиенте Next.

Часть, которая должна его установить, такова:

@Post("auth/sign-in")
  async signIn(@Body() credentials: SignInDto, @Res() res: Response) {
    try {
      const { user, token }: { user: Partial<User>; token: string } =
        await this.userService.signIn(credentials);

      delete user.password;

      res.cookie("jwt", token, { httpOnly: true, sameSite: "none" });

      res.status(200).send({ user: user });
    } catch (err: unknown) {
      throw new InternalServerErrorException(err);
    }
  }

Затем я пытаюсь отправить запрос на свой бэкэнд следующим образом:

const API_BASE_URL = 'http://localhost:8080';

export const signIn = async (email: string, password: string) => {
    try {
        const response = await axios.post(`${API_BASE_URL}/user/auth/sign-in`, {
            email,
            password,
        }, {withCredentials: false});

        if (response.status === 200) {
            console.info('User signed in successfully:', response.data);
            
            console.info(response.headers['set-cookie']); // returns undefined
            
            return response;
        } else {
            return null;
        }
    } catch (error) {
        console.error('Error signing in:', error);
        return null;
    }
}

Когда я проверяю запрос на вкладке сети браузера, я вижу Set-Cookie с правильным токеном jwt, но кроме этого я не могу до него добраться.

Я попытался прочитать его из заголовка set-cookie ответа, но он всегда будет неопределенным, независимо от установленной мной конфигурации CORS. Я также заметил, что когда я проверяю файлы cookie сайта, я тоже их не вижу.

Может ли кто-нибудь помочь мне объяснить, что я делаю неправильно или как мне получить доступ к файлу cookie в интерфейсе Next?

Обновлено: я также установил их при запуске своего гнездового приложения:

app.enableCors({
    origin: "http://localhost:3000",
    credentials: true,
  });

🤔 А знаете ли вы, что...
NestJS активно поддерживает внедрение зависимостей и инверсию управления для улучшения тестируемости кода.


1
125
1

Ответ:

Решено

withCredentials должно быть верно, чтобы включать файлы cookie.

const response = await axios.post(
   `${API_BASE_URL}/user/auth/sign-in`,
   { email, password },
   { withCredentials: true }
);