Passport-nestjs Github oauth: как отправить токены доступа из объекта запроса в URL-адресе обратного вызова в приложение на стороне клиента, размещенное в другом источнике?

Контроллер авторизации Nest js

      
      // route to access github oauth
      @Get('/')
      @Public()
      @UseGuards(AuthGuard('github'))
      async githubAuth() {}

      // callback url called after github strategy validates the user
      @Get('/github/callback')
      @Public()
      @UseGuards(AuthGuard('github'))
      async githubAuthRedirect(
        @Req() req,
        @Res({ passthrough: true }) res: Response,
      ) {
        req.user.tokens = await this.authService.login(req.user);
        const authData = JSON.stringify(
          await this.authService.githubLogin({ ...req }),
        );

        // send this data to react app on a different origin
        res.cookie('auth-data', authData);
        res.redirect('http://localhost:3000');
      }

Код реакции на стороне клиента

      function Login({}: Props) {
  const handleLoginWithGithub = () => {
    window.open("http://127.0.0.1:5000/auth/", "_self");
  };

  return (
    <div>
     ...
    
          <button onClick={handleLoginWithGithub}>
            Login With GitHub
          </button>
...
</div>
)

Проблема

Маршрут авторизации, вызываемый на стороне клиента, вызывается с помощью функции window.open(), которая не позволяет устанавливать withCredentials, как в axios. Это приводит к установке заголовка Set-cookie, но файл cookie не устанавливается, поскольку сервер и клиент имеют разные источники.

Изображение заголовков ответа с заголовком Set-cookie

Изображение cookie не устанавливается

0 ответов

Другие вопросы по тегам