代码之家  ›  专栏  ›  技术社区  ›  user20492045

类型错误:无法将未定义或null转换为Next.js应用程序13中的对象,Next auth v4,

  •  0
  • user20492045  · 技术社区  · 2 年前

    使用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},
      }
    }
    
    0 回复  |  直到 2 年前