ウェブサイト検索

typescript - create-t3-stack(NextJS、NextAuth)でCredentials Providerのセッションが常にnullを返す


なので、データベースのメールとパスワードでログインページを動作させようとしているのですが、値を送信するといつもセッションがnullになります。私がやっていることは次の通りです:

CredentialsProvider({
      name: "Credentials",
      credentials: {},
      async authorize(credentials: any) {
        //check user
        const user: any = await prisma.user.findUnique({
          where: {
            email: credentials.email,
          },
        });

        if (!user) {
          throw new Error("No user found");
        }
        console.log("user credentials", user);
        const checkPassword = await compare(
          credentials.password,
          user?.password
        );
        console.log("user?.password", user?.password);

        if (!checkPassword || user.email !== credentials.email) {
          throw new Error("Password or Email dont match");
        }

        return user;
      },
    }),
  ],
  // Include user.id on session
  callbacks: {
    session({ session, user }) {
      if (session.user) {
        session.user.id = user.id;
      }
      return session;
    },
  },
  session: {
    strategy: "jwt",
    },
  },
  jwt: {
    secret: "test",
  },
  secret: "test",
  // pages: {
  //   signIn: "/",
  //   newUser: "/signin",

  //   signOut: "/signout",
  //   error: '/error'
  // },

なので、私のサインインページで signIn メソッドを呼び出します:

async function onSubmitLoginValues(values: LoginValuesProps): Promise<any> {
    const result = await signIn("credentials", {
      email: values?.email,
      password: values?.password,
      redirect: false,
      callbackUrl: "/",
    });
    console.log("result", result);
    if (result?.ok) router.push("/");
    return result;
  }

結果が返されます: エラー: null OK: true ステータス: 200 URL: "http://localhost:3000/"

getServerSideProps で、私はそれを二つの異なる方法で呼び出そうとしました:

export const getServerSideProps = async (ctx: GetServerSidePropsContext) => {
const session = await getServerAuthSession(ctx);
if (!session) {
  return {
    redirect: { destination: "/signin", permanent: false },
  };
}
return {
  props: {
    session,
  },
};

//OR
console.log("ctx", ctx);
const response = await fetch("http://localhost:3000/api/auth", {
  method: "GET",
  credentials: "include",
  //@ts-ignore
  headers: {
    Cookie: ctx.req.headers.cookie,
  },
});
console.log("RESPOSNDE", response.json());

if (!response) {
  return {
    redirect: { destination: "/signin", permanent: false },
  };
}
const data = await response.json();
return { props: { data } };
};

いくつか調べてみましたが、どの方法も私にはうまくいきませんでした。同じような問題に直面したことがある方がいれば、とても感謝します。昨日からデバッグしているのです 😦