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 !<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.