我将 next auth v4 与带有服务器组件的 next js 13 beta 一起使用,一切正常。但是我有一种情况需要知道登录的用户 ID,因为我使用的是下一个身份验证,我可以访问会话,我可以使用 useSession() 但随后我需要将组件设为客户端组件,所以我想在服务器上使用它,我可以在 API 中使用 getServerSession,因为我可以访问 req 和 res 对象,但是在下一个带有新应用程序目录的 js beta 中,我不能这样做。如果您知道如何解决此问题,请告诉我。谢谢
import { getServerSession } from "next-auth";
import { authOptions } from "@/pages/api/auth/[...nextauth]";
const Test = async () => {
const user_id = 1; // How do I get user id from session, user_id is available in session
// I don't have access req & res object in server component.
const data = await getServerSession(request, response, authOptions);
console.log(data);
});
return (
<></>
);
};
export default Test;
没有找到足够的信息
我找到了答案,在下一个 js 13 beta 中,你不需要使用请求和响应对象,只需使用 authOptions,它就可以了
import { getServerSession } from "next-auth";
import { authOptions } from "@/pages/api/auth/[...nextauth]";
const Test = async () => {
const data = await getServerSession(authOptions);
console.log(data);
});
return (
<></>
);
};
export default Test;
import { NextAuthOptions } from 'next-auth'
import { getServerSession } from 'next-auth'
// this is NextAuthOptions
export interface AuthOptions {
providers: Provider[];
secret?: string;
session?: Partial<SessionOptions>;
jwt?: Partial<JWTOptions>;
pages?: Partial<PagesOptions>;
callbacks?: Partial<CallbacksOptions>;
events?: Partial<EventCallbacks>;
adapter?: Adapter;
debug?: boolean;
logger?: Partial<LoggerInstance>;
theme?: Theme;
useSecureCookies?: boolean;
cookies?: Partial<CookiesOptions>;
}
const session = await getServerSession(authOptions)
// Based on AuthOptions interface
const authOption: NextAuthOptions = {
// Since you tagged prisma
adapter: PrismaAdapter(yourDbConfig),
session: {
strategy: 'jwt',
},
// https://next-auth.js.org/configuration/pages
pages: {
signIn: '/login',
},
providers: [
GoogleProvider({
clientId: clientId,
clientSecret: clientSecret,
}),
],
callbacks: {
async session({ token, session }) {
if (token) {
// set session here
}
return session
},
async jwt({ token, user }) {
const dbUser = getUserByTokenEmail
//add logic here
},
},
}