Развернутое приложение NextJS на AWS Amplify
Я получаю ненадежный узел в своих журналах CloudWatch.
Кто-нибудь может помочь?
[следующая аутентификация] [ошибка] [UNTRUST_HOST_ERROR]
URL: https://master.dtzbr8sfj0q7k.amplifyapp.com/
Я добавил этот домен в разрешенные обратные вызовы Cognito.
пакет.json
"next": "13.0.7",
"next-auth": "^4.18.6",
Настройки сборки
version: 1
applications:
- frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
- COGNITO_CLIENT_ID=${COGNITO_CLIENT_ID}
- COGNITO_CLIENT_SECRET=${COGNITO_CLIENT_SECRET}
- COGNITO_DOMAIN=${COGNITO_DOMAIN}
- JWT_SECRET=${JWT_SECRET}
- NEXTAUTH_URL=${NEXTAUTH_URL}
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
appRoot: client
/pages/api/[...nextauth].js
import NextAuth from "next-auth/next";
function CognitoProvider(options) {
return {
id: "cognito",
name: "Cognito",
type: "oauth",
wellKnown: `${options.issuer}/.well-known/openid-configuration`,
idToken: true,
profile(profile) {
return {
id: profile.sub,
name: profile.name,
email: profile.email,
image: profile.picture,
};
},
options,
};
}
export default NextAuth({
providers: [
CognitoProvider({
clientId: process.env.COGNITO_CLIENT_ID,
clientSecret: process.env.COGNITO_CLIENT_SECRET,
issuer: process.env.COGNITO_DOMAIN,
}),
],
secret: process.env.JWT_SECRET,
callbacks: {
jwt({ token, account, profile }) {
if (account) {
console.info("Account exists");
// modify token
token.role = profile["cognito:groups"];
}
return token;
},
session({ session, token }) {
if (session.user) {
// modify session
session.user.roles = token.role;
}
return session;
},
},
});
/index.js
import Head from "next/head";
import App from "../components/App/App";
import { useSession, signIn, signOut } from "next-auth/react";
export default function Home() {
const { data: session } = useSession();
if (session) {
return (
<>
<Head>
<title>Create Next App</title>
<meta name = "description" content = "Generated by create next app" />
<meta name = "viewport" content = "width=device-width, initial-scale=1" />
<link rel = "icon" href = "/favicon.ico" />
</Head>
<App />
</>
);
}
return (
<>
Not signed in <br />
<button
onClick = {() => {
e.preventDefault();
signIn("cognito", {
callbackUrl: process.env.NEXTAUTH_URL,
});
}}
>
Sign in
</button>
</>
);
}
Любая помощь будет оценена
Убедитесь, что вы правильно настроили переменную среды NEXTAUTH_URL
в AWS Amplify.
Я проверил ваш сайт, и я вижу эту ошибку:
В документации NextAuth.js,
Вот похожий случай: Как решить ошибку выборки клиента для следующей аутентификации
Это моя конфигурация env i.ibb.co/7rN7jCQ/…
В моем локальном env NEXTAUTH_URL=localhost:3000 работает, но в развернутом не работает
Не могли бы вы помочь?
Сегодня у меня была такая же проблема, и я нашел это решение, которое сработало для меня:
Мне пришлось отредактировать amplify.yml в настройках сборки и установить переменные env внутри файла .env, как показано ниже:
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env
- echo "JWT_SECRET=$JWT_SECRET" >> .env
- npm run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
Мне пришлось сделать это для всех моих переменных среды, чтобы мое приложение Next.js могло получить к ним доступ.
Надеюсь, это помогло.
Проблема недоверия, о которой сообщается на сервере, вероятно, связана с настройкой URL. Дайте мне знать, если это не сработает.