blocked by CORS policy

Пытаюсь на свой сайт добавить функции "войти с помощью Google". Для этого использую библиотеку passport js.

Так выглядит мой код:

В самом начале я ставлю хедеры, чтобы разрешить fetch запросы на другие домены

this.router.use(function(req, res, next) {
            res.header('Access-Control-Allow-Credentials', true);
            res.header('Access-Control-Allow-Origin', req.headers.origin);
            res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
            res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
            if ('OPTIONS' == req.method) {
                 res.send(200);
             } else {
                 next();
             }
        });

далее уже использую стратегию для passport js и устанавливаю функции на запросы:

passport.use(new GoogleStrategy({
            clientID: "my-id",
            clientSecret: "my-secret",
            callbackURL: "http://localhost:5000/api/Login/Advertiser/Google/callback"
          },
          function(accessToken, refreshToken, profile, cb) {
              console.log(accessToken, refreshToken, profile, cb)
              return cb(null, profile);   
          }
        ));

        this.router.get('/api/Login/Advertiser/Google', 
        passport.authenticate('google', { scope: ['profile'] }));

        this.router.get('/api/Login/Advertiser/Google/callback', 
            passport.authenticate('google', { failureRedirect: '/login' }),
            function(req, res) {
                console.log(req)
                // Successful authentication, redirect home.
                res.redirect('/');
            }
        );

И потом на клиенте, при нажатии на кнопку "войти через Google", я делаю fetch запрос вида:

static LoginGoogle = (callback) => {
        Loader.activeLoader()
        return fetch('/api/Login/Advertiser/Google', {
            method: 'GET',
            headers: {
              'Accept': 'application/json',
              'Content-Type': 'application/json',
            }
          }).then( response => {
                Loader.stopLoader()
                response.json().then((data) => {
                    callback(data)
                })
          })
    }

НО когда я нажимаю на эту кнопку в консоле на клиенте выходит ошибка:

введите сюда описание изображения

(делал все по докам passport js, кроме первого действия(с заголовками). У них его нет, но без заголовков тоже не работает).

(клиент на 3000 порту, сервер на 5000)

Как решить эту проблему?


Ответы (0 шт):