DEV Community

Discussion on: Using Credentials provider with a custom backend in NextAuth.js!

Collapse
hashinclude72 profile image
Shubham Jaswal

you can also set redirect = false and catch response from signIn function :

const res = await signIn('credentials',
      {
        email,
        password,
        callbackUrl: `${window.location.origin}/account_page` 
        redirect: false,
      }
    )
if (res?.error) handleError(res.error)
if (res.url) router.push(res.url);
Enter fullscreen mode Exit fullscreen mode

signIn return a Promise which has following structure :

{
    error: string || undefined,
    status: number,
    ok: boolean,
    url: url || null
}
Enter fullscreen mode Exit fullscreen mode

you can check more on next-auth.js.org/getting-started/c...

Collapse
brianwachira profile image
brianwachira

How does this work?
I have followed your example and am not getting any response in login page

Collapse
sawebb profile image
Austin Webb

You are not getting a response because the user isn't being set properly. The following code is able to handle Credentials (user & pass) and Providers auth, while setting jwt and session correctly.

callbacks: {
    jwt: async (token, user) => {
      if (user) {
        token.jwt = user.jwt;
        token.user = user.user;
        token.accessToken = user?.accessToken;
      }
      return Promise.resolve(token);
    },
    session: async (session, token) => {
      session.jwt = token.jwt;
      session.accessToken = token.accessToken ? token.accessToken :
      session.user = token.user ? token.user : session.user; 
      return Promise.resolve(session);
    },
},
Enter fullscreen mode Exit fullscreen mode
Collapse
twisha profile image
Twisha Author

Cool! Happy to see it has been added as a feature. Thanks for the update :)

Collapse
juanda_dev profile image
Juan Martínez

Thank you so much! I hated that the function reloaded the page every time I submit the form