Я настроил приложение angular / nodejs (express) с аутентификацией Google, но всякий раз, когда я запрашиваю google oauth через приложение angular, оно выдает ошибку cors, но если я запрашиваю напрямую из браузера, оно работает как должно.
Сервер работает на порту 3000, а Angular на 4200.
Я использую пакет cors
, чтобы разрешить все запросы cors в server.js:
app.use(passport.initialize());
// Passport Config
require('./config/passport')(passport);
// Allowing all cors requests
app.use(cors());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/users', usersRouter);
app.use('/auth', authRouter);
Конфигурация паспорта:
passport.use(
new GoogleStrategy(
keys,
(token, refreshToken, profile, done) => {
process.nextTick(() => {
User.findOne({ email: email })
.then(user => {
if (user) {
return done(null, user);
}
})
.catch(err => console.log(err));
});
}
)
);
Это маршрут аутентификации Google:
router.get('/google', passport.authenticate('google', {
scope: ['profile', 'email'],
session: false
}),
(req, res) => {
// Create JWT payload
const payload = {
id: req.user.id,
email: req.user.email
};
jwt.sign(payload, secret, expires, (err, token) => {
res.json(token);
});
}
);
А вот угловой запрос:
googleAuth() {
return this.http.get<any>('http://localhost:3000/auth/google').pipe(
map(user => {
if (user) {
localStorage.setItem(
'currentUser',
JSON.stringify(user)
);
}
return user;
})
);
}
Ошибка в консоли Chrome:
Failed to load "https://accounts.google.com/o/oauth2/v2/auth?response_type=code...": No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access
Я также авторизовал происхождение JavaScript в консоли разработчиков Google:
происхождение
Я довольно плохо знаком с angular и nodejs, и я прочитал все подобные вопросы, но не смог найти обходной путь для этой проблемы.