Next-auth GET /api/auth/session 400 CLIENT_FETCH_ERROR Неожиданный токен «E» (развертывание Netlify)

Проблема:

Мой next-auth работает локально, но когда я развертываю его в Netlify, я получаю эту CLIENT_FETCH_ERROR при доступе к чему-либо (компонент RouteGuard вызывает хук useSession и нажимает на /auth/signin, если он не аутентифицирован && по непубличному пути).

ПОЛУЧИТЬ https://website.com/api/auth/session 400 --> Ошибка: это действие с HTTP GET не поддерживается NextAuth.js

[next-auth][error][CLIENT_FETCH_ERROR] Неожиданный токен 'E', "Ошибка: Thi"... недопустимый JSON

ПОСТ https://website.com/api/auth/_log 400

Локально он вызывает http://localhost:4200/api/auth/session и возвращает 304 с {}.

Где вызывается хук useSession:

_app > Session Provider session = {session} > RouteGuard

Ожидаемый возврат API согласно документации:

https://next-auth.js.org/getting-started/client#getsession

При вызове getSession() отправит запрос в /api/auth/session и возвращает обещание с объектом сеанса или null, если сеанс не существует.

https://next-auth.js.org/getting-started/rest-api#get-apiauthsession

Возвращает безопасный для клиента объект сеанса или пустой объект, если сеанса нет. Содержимое возвращаемого объекта сеанса настраивается с помощью обратного вызова сеанса.

Обратный вызов сеанса:

async session({ session, token, user }) {

  session.accessToken = token.accessToken
  session.user._id = token.sub
  session.user.name = token.name
  session.user.email = token.email
  if (token.login_provider) session.user.login_provider = token.login_provider
  return session

}

Что я уже проверил локально и на Netlify:

  • [...nextauth].ts правильно помещен в папку /pages/api/auth
  • правильно называется именно так как я написал выше
  • NEXTAUTH_URL задан правильно (без использования пользовательского basePath)
  • Использование Next.js Runtime - v4.27.3 также устанавливает это автоматически, хотя не имеет значения, как это установлено.
  • NEXT_PUBLIC_API_URL задан правильно (тот же URL + /api)
  • NEXTAUTH_SECRET установлен правильно
  • Страницы объекта NextAuthOptions: {signIn: '/auth/signin'} правильно
  • Страница /pages/auth/signin размещена и названа правильно
  • Учетные данные, переменные env поставщика Google и Facebook установлены правильно
"next": "11.1.0",
"next-auth": "^4.6.1",

Что еще я должен проверить?

Гуглил, читал документы, перечитывал документы и пробовал все безрезультатно в течение дня...

Помогите пожалуйста /о\

Обновлять:

  • провел еще несколько исследований, и я не знаю, имеет ли это значение, но запрос на локальном хосте отправляется с файлами cookie, а эти файлы cookie не отправляются в развернутой версии:

следующий-auth.csrf-токен

следующий-auth.callback-url

Обновление 2:

  • getProviders не работает в getServerSideProps на Netlify, потому что ему не нравится SSR, я думаю

3
828
1

Ответ:

Решено

Исправлено с использованием точных версий [email protected] и [email protected].

Решение найдено здесь: https://answers.netlify.com/t/nexauth-returning-action-not-found/77779/5