Discussions

callbacks et jwt

Image

Bonjour !

 

Je viens demander de l'aide alors que suis bloqué avec next.js version 4 concernant les callbacks et le jwt.

 

Voici le code de [...nextauth].js :

// Librairies
import NextAuth from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import { connectToDataBase } from '../../../helpers/mongodb';
import { verifyPassword } from '../../../helpers/auth';

export const authOptions = {
  // Session aléatoire
  // session: {
  //   maxAge: 30 * 24 * 60 * 60, // 30 days
  //   generateSessionToken: () => {
  //     return randomUUID?.() ?? randomBytes(32).toString('hex');
  //   },
  // },

  // Ajout des informations de l'user (email, pseudo, password)
  providers: [
    CredentialsProvider({
      async authorize(credentials) {
        const { email, password } = credentials;

        // Connexion à MongoDB
        const clientMongoDB = await connectToDataBase();

        // Etape 1 - Utilisateur existant ?
        const user = await clientMongoDB
          .db()
          .collection('users')
          .findOne({ email: email });

        if (!user) {
          clientMongoDB.close();
          throw new Error(
            'Impossible de vous authentifier, merci de vérifier vos identifiants.'
          );
        }

        // Etape 2 - Mot de passe est-il correct vs celui enregistré ?
        const isValid = await verifyPassword(password, user.password);

        if (!isValid) {
          clientMongoDB.close();
          throw new Error(
            'Impossible de vous authentifier, merci de vérifier vos identifiants.'
          );
        }

        // Etape 3 - Succès
        clientMongoDB.close();
        return {
          email: user.email,
          name: user.pseudo,
          id: user._id,
          roles: user.roles,
        };
      },
    }),
  ],

  // Ajout de nouvelles informations (cookies) à notre session user
  callbacks: {
    // Récupération du token
    async jwt({ token, user }) {
      if (user) {
        token.accessToken = user.accessToken;
      }
      return token;
    },
    // Récupération du user
    async session({ session, user }) {
      // Check d'existence de user
      user && (session.user = user);

      return session;
    },
    secret: process.env.NEXTAUTH_SECRET,
  },
};

export default NextAuth(authOptions);

 

Voici le problème rencontré :

event - compiled successfully in 36 ms (93 modules)

[next-auth][error][JWT_SESSION_ERROR] 

https://next-auth.js.org/errors#jwt_session_error decryption operation failed {   

  message: 'decryption operation failed',

  stack: 'JWEDecryptionFailed: decryption operation failed\n' +

    '    at gcmDecrypt (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\jose\\dist\\node\\cjs\\runtime\\decrypt.js:67:15)\n' +

    '    at decrypt (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\jose\\dist\\node\\cjs\\runtime\\decrypt.js:92:20)\n' +  

    '    at flattenedDecrypt (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\jose\\dist\\node\\cjs\\jwe\\flattened\\decrypt.js:119:52)\n' +

    '    at async compactDecrypt (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\jose\\dist\\node\\cjs\\jwe\\compact\\decrypt.js:18:23)\n' +

    '    at async jwtDecrypt (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\jose\\dist\\node\\cjs\\jwt\\decrypt.js:8:23)\n' +

    '    at async Object.decode (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\next-auth\\jwt\\index.js:64:7)\n' +

    '    at async Object.session (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\next-auth\\core\\routes\\session.js:41:28)\n' +

    '    at async AuthHandler (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\next-auth\\core\\index.js:158:27)\n' +        

    '    at async getServerSession (C:\\Users\\Lordtoinou\\Desktop\\Believemy Formation\\Next\\projet1-next\\node_modules\\next-auth\\next\\index.js:113:19)\n' +   

    '    at async getServerSideProps (webpack-internal:///./src/pages/index.js:292:21)',

  name: 'JWEDecryptionFailed'

}

http://localhost:3000

null

 

 

D'une part l'objet 'username' dans getServerSideProps dans 'index.js' apparait en 'null' dans la console :

let username = null;

  console.log(process.env.NEXTAUTH_URL);

  if (session) {
    username = session.user.name;
  }
  console.log(username);

D'autre part le décryptage du JWT ne se fait pas correctement.

 

Comment est-il possible de resoudre le probleme svp ? Merci par avance !

 

 

Antoine Delamare
Blockchain & Cie.
6 réponses
Image
Antoine Delamare
Le 27/03/2023 à 13:38

Bonjour !

Serait-il possible d'obtenir de l'aide pour le message ci-dessus svp ?

Merci par avance !

Image
Louis-Nicolas Leuillet
Le 27/03/2023 à 15:44

Je te recommande d'utiliser la version du cours pour NextAuth, et donc la version 3. Sans cela, et comme la nouvelle version est très récente, je vais avoir du mal à pouvoir t'aiguiller.

 

Enfin, pour ce qui concerne le problème avec l'objet username qui apparaît en null dans la console, cela peut être lié à un problème de typage ou de mauvaise manipulation de données. Vérifie que session existe mais également session.user

let username = null;



  console.log(process.env.NEXTAUTH_URL);



  if (session && session.user) {

    username = session.user.name;

  }

  console.log(username);
Image
Antoine Delamare
Le 27/03/2023 à 17:38

Merci pour le retour !

Image
Jean-luc Crobeddu
Le 05/04/2023 à 12:15 (modifié le 05/04/2023 à 12:34)

Bonjour Louis-Nicolas,

Je te remercie pour la doc (https://next-auth.js.org/v3/configuration/callbacks) que tu m'as transmis dans le cadre d'une autre question. 

Je souhaiterais néanmoins émettre une critique( je sais que tu es ouvert à la critique à condition quelle soit positive). Cette partie est assez délicate et personnellement je regrette que tu n'aies pas partagé la démarche ou le raisonnement qui t'as conduit à partir de la doc à écrire ce code, cela aurait été fort utile je pense afin d'être davantage autonome quelque soit la version utilisée. Qu'en penses tu ? 

Image
Maxime Delville
Le 05/04/2023 à 13:29

Oui tkt j'ai aussi des problèmes dans ce genre avec next-auth quand je suivais le cours, utilise simplement la version du cours

Image
Louis-Nicolas Leuillet
Le 05/04/2023 à 20:36

Hello Jean-Luc, oui en effet il y a des petits soucis si on utilise pas la même version que le cours, ça bouge très souvent.

Image
Inscrivez-vous ou connectez-vous pour participer à la discussion.

Informations

Créée le 22 mars 2023 22:43
Dernière activité le 5 avril 2023 20:36