Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

254
Visualizações
Email provider: How to preserve value in `signIn` callback between sending email and verification calls?

I want to implement role based authentication in my app.
After researching for a while I found a simple solution - to pass role to signIn function

signIn('email', { email, role: 'user' });

Then I can unpack it from req's body

import NextAuth from 'next-auth'
export default async function auth(req, res) {
  return NextAuth(req, res, {
    // providers, adapters, etc.
    callbacks: {
      signIn: async ({ user }) => {
        const { body: { role } } = req;

        if (role) {
          user.role = role;
        }
        return true;
      },
      session: async ({ user, session }) => {
        session.user = {...session.user, ...user };
        return session
      }
    }
  }
});

Or so I thought. Magic link sign in flow has two steps: sending email and confirming it.

The role I provide to signIn function is only available during the first step and saving user to users collection only happens after user confirms email, so when user confirms email there's no role.

I tried storing role in cookies

if (role) res.setHeader('Set-Cookie', 'user-role=' + role + ';Max-Age=600');

But cookies get overriden after I confirm email and the role is lost.
I don't want to create additional collections and/or records in my database.

How can I preserve role inside signIn callback without storing it in a separate database collection? Maybe there's some other solution you can think of?

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda