Не работает CORS в nest js + react
Всем привет. У меня есть сервер, который я писал на nest js, задеплоил на heroku при помощи docker контейнера(nest + postgres). Когда я делал запросы из postman или напрямую к серверу из браузера, все работал нормально. Но, сейчас я стал писать frontend и столкнулся с проблемой политики CORS. Я пытался добавлять app.enableCors() или const app = await NestFactory.create(AppModule, {cors: true}); и все другие их комбинации, даже пытался сделать app.use(cors()), как в express. Ничего не помогало. И я, просто, не знаю, что мне нужно делать в такой ситуации + времени на этот проект остается вообще немного. frontend я начал писать на react. Так же я пробовал передавать различные заголовки в сам запрос в react. Не знаю, надо ли отмечать, но небольшой сервер на express у меня работал корректно.
Вот как я делаю запрос при помощи axios.
const createInstance = (url = '') => axios.create({
baseURL: `https://cp-itr.herokuapp.com/${url}`,
});
Уточнение:
Оказалось, что проблема не со всеми эндпоинтами. Ошибка CORS возникает только только на моем эндпоинте аутентификации oauth google, который я определил на сервере. Но, я все еще не знаю, как мне это исправить.
Моя старатегия google. В callbackURL содержится http://localhost:3000/auth/google/redirect (на localhost 3000 я запускаю react)
import {Strategy, Profile, VerifyCallback} from "passport-google-oauth20";
import {HelperService} from "../../helper/helper.service";
@Injectable()
export class GoogleStrategy extends PassportStrategy(Strategy, 'google') {
constructor(private helperService: HelperService) {
super({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_SECRET,
callbackURL: process.env.GOOGLE_REDIRECT_URI,
scope: ['profile'],
});
}
async validate(accessToken: string, refreshToken: string, profile: Profile, done: VerifyCallback): Promise<any> {
const payload = this.helperService.createAuthPayload(profile);
done(null, payload);
}
}
Ответы (1 шт):
Ну, в общем, я смог найти ответ по данной проблеме. Он находится вот тут: https://stackoverflow.com/questions/66250525/google-login-with-passportstrategy-in-nestjs-backend-not-working-called-by-react . Если вкратце, то нужно перенести саму аутентификацию во фронт, а в бэк передавать только токен, который приходит нам после аутентификации, на тот эндпоинт, который проверит наш токен на валидность и уже дальше что-то с ним сделает.