Bonjour à tous,

Je débute en Node et je me suis intéressé au module "passport" pour gérer les sessions utilisateurs.

J'ai trouvé ce tuto: https://blog.risingstack.com/node-he...n-passport-js/
Le code complet qui illustre le tuto est là: https://github.com/RisingStack/nodehero-authentication

J'en viens à mon problème: je ne comprend pas comment l'auteur configure passport.

fichier app.js, on trouve:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
require('./authentication').init(app)
ensuite dans le module "authentication":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
module.exports = {
  init: require('./init'),
  middleware: require('./middleware')
}
enfin, dans passport.js:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
const passport = require('passport')
const LocalStrategy = require('passport-local').Strategy
 
const authenticationMiddleware = require('./middleware')
 
const user = {
  username: 'test-user',
  password: 'test-password',
  id: 1
}
 
function findUser (username, callback) {
  if (username === user.username) {
    console.log("utilisateur trouve");
    return callback(null, user)
  }
  return callback(null)
}
 
passport.serializeUser(function (user, cb) {
  cb(null, user.username)
})
 
passport.deserializeUser(function (username, cb) {
  findUser(username, cb)
})
 
 
function initPassport () {
  passport.use(new LocalStrategy(
    function(username, password, done) {
      findUser(username, function (err, user) {
        if (err) {
          return done(err)
        }
        if (!user) {
          console.log("utilisateur introuvable");
          return done(null, false)
        }
        if (password !== user.password  ) {
          console.log("mauvais psd");
          return done(null, false)
        }
        console.log("c'est tout bon, on est logge");
        return done(null, user)
      })
    }
  ))
 
  passport.authenticationMiddleware = authenticationMiddleware
}
 
module.exports = initPassport
Autrement dit, à aucun moment on ne passe la variable "passport" au module de conf de passport ci dessus.
A aucun moment on ne retourne ce passport au fichier principal de l'app.

Il semble qu'en le configurant à un endroit à part, le module "passport" soit dans le contexte global initialisé et configuré.

Quelqu'un peut m'expliquer pourquoi ?

PS:
instinctivement, moi j'aurai plutôt écrit une fonction qui prend en paramètre un "passport" puis le configure.
Voir, un module qui configure un passport puis l'expose avec export...

Merci d'avance :-)