На запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. Ошибка CORS Next.js при использовании следующего подключения
Я пытаюсь использовать в Next.js с
next-connect
. Однако я не могу заставить его работать.
Вот мой код:
function handler() {
if (!COOKIE_SECRET || !SESSION_SECRET)
throw new Error(
`Please add COOKIE_SECRET & SESSION_SECRET to your .env.local file!`
)
return nc<NextIronRequest, NextApiResponse>({
onError: (err, _, res) => {
error(err)
res.status(500).end(err.toString())
},
})
.use(
cookieSession({
name: 'session',
keys: [COOKIE_SECRET],
maxAge: 24 * 60 * 60 * 1000 * 30,
secure: IS_PRODUCTION && !process.env.INSECURE_AUTH,
signed: IS_PRODUCTION && !process.env.INSECURE_AUTH,
})
)
.use((req,res,next)=> {
console.log('cors')
res.setHeader("Access-Control-Allow-Origin", "*")
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization"
);
if (req.method == "OPTIONS") {
res.setHeader("Access-Control-Allow-Methods", "PUT, POST, PATCH, DELETE, GET");
return res.status(200).json({});
}
next()
})
}
export default handler
FWIW, я пробовал все другие решения, упомянутые в StackOverflow, например /questions/27468462/problema-cors-v-zaprashivaemom-resurse-otsutstvuet-zagolovok-access-control-allow-origin/27468478#27468478
Я также пробовал устанавливать такие пакеты, как
cors
&
nextjs-cors
но получаю ту же ошибку:
Доступ для получения по адресу https://api.twitter.com/oauth/authorize?oauth_token=xxxxxxxxxxxx'(перенаправлен с http: // localhost: 3000 / api / twitter / generate-auth-link) из источника http : // localhost: 3000 'был заблокирован политикой CORS: на запрошенном ресурсе отсутствует заголовок'Access-Control-Allow-Origin'. Если непрозрачный ответ соответствует вашим потребностям, установите режим запроса на 'no-cors', чтобы получить ресурс с отключенным CORS.
У меня есть репродукция Github здесь → https://github.com/deadcoder0904/twitter-api-v2-3-legged-login-using-next-connect (см. Последний коммит для cors)
Я проверил вкладку сети, но не вижу, чтобы там были установлены заголовки. Я также добавил
console.log('cors')
но его там нет.
Я думаю, промежуточное ПО
server/api-route.ts
файл вообще не вызывается.
Мне нужен этот файл для промежуточного программного обеспечения. Как мне это решить?
1 ответ
На самом деле я не звонил промежуточному программному обеспечению. Это было в другом файле.
Я удалил
cookie-session
и сохранил
next-iron-session
поскольку мне нужна только 1 сессионная библиотека.
Затем я сделал экспорт в
api/twitter/generate-auth-link
маршруты как оболочка для
handler().get(generateAuthLink)
функция вместо просто
generateAuthLink
.
А затем я изменил интерфейс, чтобы не использовать
fetch
но вместо этого используйте
Link
.
Это исправлено!