我使用 AWS CLI、Docker、Github 在 AWS EC2 中部署我的 Nextjs 14 应用程序。 对于身份验证,我使用 next-auth。每次用户成功访问时,下一步身份验证都会将其重定向到本地主机。
.env
登录操作:
signIn('credentials', {
email: values.email,
password: values.password,
callbackUrl: `${process.env.NEXTAUTH_URL}`
})
auth.ts:
import NextAuth, { NextAuthConfig } from 'next-auth'
import CredentialsProvider from 'next-auth/providers/credentials'
export const authOptions: NextAuthConfig = {
providers: [
CredentialsProvider({
async authorize(credentials, req) {
if (!credentials.email || !credentials.password) return null
const { email, password } = credentials
console.log(credentials, 'credentials')
try {
const response = await fetch(
'http://**********:6060/auth/signin',
{
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ email, password })
}
)
const data = await response.json()
return data
} catch (err) {
console.log(err)
return null
}
}
})
],
session: {
strategy: 'jwt'
},
trustHost: true,
secret: process.env.AUTH_SECRET,
callbacks: {
jwt({ token, user }) {
if (user) {
return { ...token, ...user }
}
return token
},
session: ({ token, session }) => {
session.user = token.user
session.token = token.token
return session
},
authorized({ auth }: { auth: any }) {
return !!auth?.user // this ensures there is a logged in user for -every- request
}
},
pages: {
signIn: '/sign-in' // overrides the next-auth default signin page https://authjs.dev/guides/basics/pages
}
}
export const {
handlers: { GET, POST },
auth
} = NextAuth(authOptions)
NEXTAUTH_URL 变量在容器日志中可用,但在浏览器中不可用。请参阅容器日志以获取更多信息