judy
judy

Reputation: 117

How can I set Next-Auth callback url? and next-auth session return null

I want to set login, logout callback url. So, I set the callback url like this.

 //signIn
 const signInResult = await signIn("credentials", {
    message,
    signature,
    redirect: false,
    callbackUrl: `${env.nextauth_url}`,
});

//signOut
signOut({ callbackUrl: `${env.nextauth_url}`, redirect: false });

But, When I log in, I look at the network tab.
api/auth/providers, api/auth/callback/credentials? reply with callbackUrl(url) localhost:3000

It's api/auth/callback/credentials? reply.

enter image description here

It's api/auth/providers reply

enter image description here

and api/auth/session reply empty object.

enter image description here

When I run on http://localhost:3000, everything was perfect.
But, After deploy, the login is not working properly. How can I fix the error?

I added [...next-auth] code.

import CredentialsProvider from "next-auth/providers/credentials";
import NextAuth from "next-auth";
import Moralis from "moralis";
import env from "env.json";

export default NextAuth({
  providers: [
    CredentialsProvider({
      name: "MoralisAuth",
      credentials: {
        message: {
          label: "Message",
          type: "text",
          placeholder: "0x0",
        },
        signature: {
          label: "Signature",
          type: "text",
          placeholder: "0x0",
        },
      },
      async authorize(credentials: any): Promise<any> {
        try {
          const { message, signature } = credentials;
          await Moralis.start({
            apiKey: env.moralis_api_key,
          });
          const { address, profileId } = (
            await Moralis.Auth.verify({ message, signature, network: "evm" })
          ).raw;
          if (address && profileId) {
            const user = { address, profileId, signature };
            if (user) {
              return user;
            }
          }
        } catch (error) {
          console.error(error);
          return null;
        }
      },
    }),
  ],
  pages: {
    signIn: "/",
    signOut: "/",
  },
  session: {
    maxAge: 3 * 24 * 60 * 60,
  },
  callbacks: {
    async jwt({ token, user }) {
      user && (token.user = user);
      return token;
    },
    async session({ session, token }: any) {
      session.user = token.user;
      return session;
    },
    async redirect({ url, baseUrl }) {
      // Allows relative callback URLs
      if (url.startsWith("/")) return `${baseUrl}${url}`;
      // Allows callback URLs on the same origin
      else if (new URL(url).origin === baseUrl) return url;
      return baseUrl;
    },
  },
  secret: env.nextauth_secret,
});

Upvotes: 1

Views: 5466

Answers (1)

Yadan
Yadan

Reputation: 1

enter image description here

The problem is that next auth does not provide any API configuration to achieve this purpose, you need to contribute code for this

Upvotes: 0

Related Questions