COOKIES

Nous allons mettre en place un système d'authentification , de base on voulait rajouter

req.isLoggedIn = true

Pour l'utiliser dans nos routes, le problème étant que chaque requête envoyée par l'utilisateur est différente donc cette méthode ne fonctionnera jamais !

Autre façon de faire du coup est d'utiliser les cookies !

exports.postLogin = (req, res, next) => {
    // Max-age is the life-span of the cookie, set in seconds
    // The cookie is only being set if the page is httpS with Secure
    // HttpOnly tells that the cookie is only available in Http, client-side JS cannot access it 
    res.setHeader('Set-Cookie', 'loggedIn=true; Max-Age=1800; Secure; HttpOnly')
    res.redirect('/');
};

Les cookies sont envoyés automatiquement a chaque requête vers notre serveur mongodb!

Pour récupérer la valeur des cookies :

console.log(req.get("Cookie"));
// => LOG : io=gsUqrjBAjN2h6ASRAAAA; loggedIn=true

Le cookie qui nous intéresse est le deuxième, pour récupérer sa valeur on va :

const isLoggedIn = req.get("Cookie").split(';')[1].trim().split('=')[1];
// ==> LOG : true

ATTENTION : Les cookies c'est sympa mais il faut les éviter pour stocker des données sensibles car ils sont très facilement manipulables et modifiables par les utilisateurs !

SESSIONS :

Session nous permet de stocker des infos dans le back-end.

Pour implémenter nos session :

npm i --save express-session
// app.js 
const session = require('express-session');
app.use(session({
  secret: 'we are all satoshi',
  resave: false,
  saveUninitialized: false
}))

Ensuite comme plus haut avec notre cookie on peux stocker notre isLoggedIn, ce dernier sera stocké dans le back-end dans la session et donc accessible avec toutes les requetés de notre user.

exports.postLogin = (req, res, next) => {
    User.findById('5ed0dff41f49081c9c3d7872')
        .then(user => {
            req.session.isLoggedIn = true;
            req.session.user = user;
            res.redirect('/');
        })
        .catch(err => {
            console.log(err)
        })
};