使用next.js应用程序版本13.4.2,next-auth:4.22.1,我正在使用next.js和next-auth,并使用googleProvider进行签名和注销。当我试图修改此代码时,会出现另一个错误。现在我得到这个错误未处理的运行时错误类型错误:无法将未定义或null转换为对象
错误
error src\app\login\page.jsx (26:15) @ values
- error TypeError: Cannot convert undefined or null to object
at Function.values (<anonymous>)
at SignIn (./src/app/login/page.jsx:27:26)
24 | return (
25 | <div>
> 26 | {Object.values(providers).map(provider =>{
| ^
27 | <div key={provider.name}>
28 | <button>
29 | Sign in with {provider.name}
app/components/prover.js
'use client'
import { SessionProvider } from "next-auth/react";
const Provider = ({children, session}) =>{
return <SessionProvider session={session}>{children}</SessionProvider>
}
export default Provider;
app/api/auth/[…nexttauth]/route.js
import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google"
import { MongoDBAdapter } from "@next-auth/mongodb-adapter"
import clientPromise from "../../../../../lib/mongodb"
const handler = NextAuth({
adapter: MongoDBAdapter(clientPromise),
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_ID ,
clientSecret: process.env.GOOGLE_SECRET,
}),
// ...add more providers here
],
pages: {
signIn: "/login",
},
session:{
strategy:"jwt"
},
secret: process.env.NEXTAUTH_SECRET,
callbacks:{
jwt:async({token, user}) =>{
user && (token.user = user)
return token
},
sesssion: async({session, token}) =>{
// const user = token.user
// session.user = user
// return session
if (session?.user && token?.sub) {
session.user.id = token.sub;
}
return session;
}
}
})
export {handler as GET, handler as POST}
app/login/pagejs
'use client';
import { useRouter } from 'next/navigation';
import {getProviders, signIn, useSession, getSession } from "next-auth/react";
export default function SignIn({providers}) {
// const {data:sessionData, status} = useSession();
// const router = useRouter();
// if (status === 'loading') {
// return '';
// }
// console.log("session", sessionData);
// console.log("Provider", providers);
// if (sessionData) {
// router.push('/');
// }
return (
<div>
{Object.values(providers).map(provider =>{
<div key={provider.name}>
<button>
Sign in with {provider.name}
</button>
</div>
})}
</div>
);
}
export async function getServerSideProps() {
const providers = await getProviders();
return {
props: {providers},
}
}