Search code examples
next.jsnext-auth

How to add additional data to signIn Promise return in NEXT-AUTH?


This is how we are authorizing users in our website

signIn('credentials', {
 phoneNumber: verifiedPhone,
 code: otp.data,
 type: 'phone',
 redirect: false,
}).then((res) => {
 console.log(res) // default response {error,status,ok,url}

 // How can i add additional data to this response, in my case user session

 // if (!res.user.name) openModal('add_name')
 // else toast.success('You are all set!')
});

By default, signIn will then return a Promise, that resolves:

{
 error: string | undefined
 status: number
 ok: boolean
 url: string | null
}

And we wanna add custom data to this promise return.

Actually what we wanna do is to sign user in and if the user is new, he/she is supposed to have no username so a modal opens up, enters his/her username and we update the next-auth session.

[...nextauth].js:

...
async authorize(credentials, req) {
   // check the code here
   const res = await requests.auth.signInEnterOtp(
    credentials.phoneNumber,
    credentials.code,
    credentials.type
   );

   if (!res.ok) return null
   return {
    user: {
     access_token: res.data?.access_token,
     token_type: res.data?.token_type,
     expires_at: res.data?.expires_at,
     user_info: {
      id: res.data?.user.id,
      name: res.data?.user.name,
      phone: res.data?.user.phone,
      user_type: res.data?.user.user_type,
     },
   },
 };
},
...

Solution

  • I eventually figured it like this:

    ...
    .then(async (res) => {
     const session = await getSession()
     ...
    })
    ...
    

    Bu i have another problem, it is to update the session with new username (


    EDIT

    i found a way of how to change session after sign in

    [...nextauth].js :

    ...
    async authorize(credentials, req){
     ...
     if(credentials.type === 'update_name'){
      const session = await getSession({ req })
      return session.user.name = credentails.name
     } 
     ...
    }
    

    on the client :

    signIn('credentials', {
     name: newName,
     type: 'update_name',
     redirect: false
    )