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

Viewed 713

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,
     },
   },
 };
},
...
1 Answers

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: 'name_update',
 redirect: false
)
Related