next.jsauth0

How to capture user registration in Auth0 v4 to store in my database?


I'm trying to integrate Auth0 library version 4 in my website and need to capture when a user logs in to register them in my database. Since version 4 no longer uses the API, I don't have a way to capture this as I did in version 3. How can I capture user information to store in my database? I am using next.js version 15. Here's my old code:

import { handleAuth, handleLogin, handleCallback } from '@auth0/nextjs-auth0';
import { getUserByEmail, createUser } from '../../../../lib/queries/users';

export const GET = handleAuth({
login: handleLogin({
  returnTo: "/",
}),
signup: handleLogin({
  authorizationParams: {
  screen_hint: "signup",
},
  returnTo: "/",
}),
callback: handleCallback({
  async afterCallback(req, res, session, state) {
    try {
      if (!res || !res.user) {
        console.error('לא נמצא מידע על משתמש');
        return session;
      }
    
      const existingUser = await getUserByEmail(res.user.email);

      if (!existingUser) {
        await createUser({
          email: res.user.email,
          name: res.user.name,
          auth0Id: res.user.sub,
        });
      
        console.log(`נוצר משתמש חדש: ${res.user.email}`);
      }
      session.user = {
        ...res.user
      };
    
      return session;
    } catch (error) {
      console.error('שגיאה בעיבוד משתמש לאחר התחברות:', error);
      return session;
    }
  },
}),
});

export const POST = handleAuth();

Solution

  • If you are making an async call to another API after the user authenticates, Why not just use a post-login action? It's what it is designed for. Or, if this should only occur during a registration flow, better yet -- a post-registration action.