Files
freeCodeCamp/curriculum/challenges/italian/06-quality-assurance/advanced-node-and-express/implement-the-serialization-of-a-passport-user.md

3.0 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5895f70cf9fc0f352b528e67 Implementare la serializzazione di un utente Passport 2 301556 implement-the-serialization-of-a-passport-user

--description--

Per ora non stiamo caricando un oggetto utente reale visto che non abbiamo creato il database. Questo può essere fatto in molti modi diversi, ma per il nostro progetto ci connetteremo al database una volta che avremo avviato il server e ottenuto una connessione persistente per tutto il ciclo di vita dell'app. Per fare questo, aggiungi la stringa di connessione del database (per esempio: mongodb+srv://:@cluster0-jvwxi.mongodb.net/?retryWrites=true&w=majority) alla variabile ambientale MONGO_URI. Questo è usato nel file connection.js.

Puoi creare un database gratuito su MongoDB Atlas.

Ora vogliamo connetterci al nostro database e metterci in ascolto delle richieste. Lo scopo è di non permettere richieste prima che il database sia connesso o nel caso ci sia un errore del database. Per farlo, dovrai includere la tua serializzazione e le rotte della tua app nel seguente codice:

myDB(async client => {
  const myDataBase = await client.db('database').collection('users');

  // Be sure to change the title
  app.route('/').get((req, res) => {
    //Change the response to render the Pug template
    res.render('pug', {
      title: 'Connected to Database',
      message: 'Please login'
    });
  });

  // Serialization and deserialization here...

  // Be sure to add this...
}).catch(e => {
  app.route('/').get((req, res) => {
    res.render('pug', { title: e, message: 'Unable to login' });
  });
});
// app.listen out here...

Assicurati di decommentare il codice di myDataBase in deserializeUser, e modifica il tuo done(null, null) per includere il doc.

Invia la tua pagina quando pensi di averlo fatto correttamente. Se dovessi incontrare degli errori, puoi controllare il progetto completato fino a questo punto qui.

--hints--

La connessione al database dovrebbe essere presente.

(getUserInput) =>
  $.get(getUserInput('url') + '/').then(
    (data) => {
      assert.match(
        data,
        /Connected to Database/gi,
        'You successfully connected to the database!'
      );
    },
    (xhr) => {
      throw new Error(xhr.statusText);
    }
  );

La deserializzazione dovrebbe ora usare correttamente il DB e done(null, null) dovrebbe essere invocato con il doc.

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/server.js').then(
    (data) => {
      assert.match(
        data,
        /null,\s*doc/gi,
        'The callback in deserializeUser of (null, null) should be altered to (null, doc)'
      );
    },
    (xhr) => {
      throw new Error(xhr.statusText);
    }
  );

--solutions--

/**
  Backend challenges don't need solutions, 
  because they would need to be tested against a full working project. 
  Please check our contributing guidelines to learn more.
*/