Bonjour,

Je cherche à enregister puis récupérer une variable d'une page à une autre à l'aide de session (ou flash, mais mon problème est identique pour ces deux options).

J'ai donc une variable aléatoire à faire passer d'une page à une autre : random: { start: 3, stop: 80, gap: 77 }.

Pour ce faire j'ai fait appel au plugin @fastify/session dans mon point d'entrée, app.js (je vais ici à l'essentiel) :

import fastify from 'fastify'
import fastifyCookie from '@fastify/cookie'
import fastifySession from '@fastify/session'

const app = fastify()

await app.register(fastifyCookie, {
  secret: process.env.SECRET_COOKIE_KEY,
})

await app.register(fastifySession, {
  //cookieName: 'session',
  secret: process.env.SECRET_SESSION_KEY,
  //cookie: { expires: 1800000, secure: false },
})

Ensuite voici mes requêtes HTTP GET et POST pour une URL /register :

export async function getRegister(req, res) {
  const random = await randomNumbersWithMinimumDeviation(0, 100, 20)
  let data = {}
  await modifyData(req, data)
  data.welcomeMessage = ``
  data.random = random
  req.session.random = random
  console.log('getRegister', data.random) // enregistrement OK ; return => { start: 3, stop: 80, gap: 77 }
}

export async function postRegister(req, res) {
  const client = await this.pg.connect()
  const query = `INSERT INTO __account (_username, _password) VALUES ($1, $2)` // @note `RETURNING _id` @see https://github.com/fastify/fastify-postgres#usage
  let data = {}
  try {
    await modifyData(req, data)
    data.username = await usernameFormat(req.body.username)
    data.random = req.session.random // Echec de récupération de la variable...
    console.log('postRegister', data.random) // => undefined
    await registrationFormValidationError(req, res, data)
    await client.query(query, [data.username, await hash(req.body.password)])
    return res.redirect(`/account/${data.username}`)
  } catch (error) {
    if (error.code === '23505') {
      // @note Si une erreur survient lors de l'insertion ; le code '23505' correspond à une contrainte d'unicité violée sur une colonne.
      data.errorMessage = `Erreur de soumission&nbsp;!<br>Ce nom d'utilisateur est déjà enregistré.`
      return res.code('409').view('register', { data })
    }
  } finally {
    client.release()
  }
}

Par simplicité je n'ajoute pas les fonctions appelées, sachant que celles-ci ne m'ont pas posé de problème.

Ce que je veux

Que le résultat de la fonction randomNumbersWithMinimumDeviation() (et donc de la variable random) puisse être corretement enregistré dans une session pour être récupérable par la suite entre GET et POST. Pour info ce resultat est un objet dont les valeurs donnent par exemple : { start: 3, stop: 80, gap: 77 }. Mais pour les besoins d'une démonstration on peut tout aussi bien le remplacer par une chaîne de caractères.

Ce que j'obtiens
Un console.log() undefined.

Merci de m'avoir lu.

Aucune réponse