2016-05-11 7 views
3

Wenn ich mich also auf meiner Website anmelde und innerhalb derselben URL navigiere (zB: localhost/private/xxxx), gibt res.locals.user ein Objekt zurück.res.locals Variable leer oder nicht im Bereich?

Wenn ich außerhalb des Bereichs (ex: localhost/xxxx) gehe, ist res.locals.user leer.

/app.js

... 
app.use(passport.session()); 
app.use(require('./controllers')); 
... 

/controllers/index.js

router.use('/private', require('./member.js')); 
router.use('/admin', require('./admin.js')); 

/* Some basic routes. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { ... }); 
}); 

Nach loggin in res.locals.user noch leer ist hier


/controllers/member.js

router.use(function isMember(req, res, next) { 
    if(req.isAuthenticated()) { 
    res.locals.user = req.user; 
    return next(); 
    } 
    req.flash('error', 'WHY YOU LITTLE!'); 
    res.redirect('/login'); 
}); 

router.get('/', function(req, res, next) { 
    res.redirect('/private/index'); 
}); 

router.get('/something', function(req, res, next) { 
    res.redirect('/private/somehting'); 
}); 

router.get('/darkside', function(req, res, next) { 
    res.redirect('/private/darkside'); 
}); 

res.locals.user kehrt richtig den Benutzer, ob ich /private navigieren, /private/etwas oder /private/darkside

Ist es ca verwende ich eine Middleware-Route bei der Verwendung von router.use('/private', require('./member.js'));? Wie behebe ich das?

Antwort

1

Am Ende hatte ich einfach

router.use(function (req, res, next) { 
    if(req.isAuthenticated()) { 
    res.locals.user = req.user; 
    } 
    return next(); 
}); 

bevor alle meine Routen hinzufügen und entfernen res.locals.user = req.user; aus den member.js Datei

So wäre es gib mir dieses:

/controllers/index.js

router.use(function (req, res, next) { 
    if(req.isAuthenticated()) { 
    res.locals.user = req.user; 
    } 
    return next(); 
}); 

router.use('/private', require('./member.js')); 
router.use('/admin', require('./admin.js')); 

/* Some basic routes. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { ... }); 
}); 
2

res.locals ist ein Objekt, das an die Rendering-Engine Ihrer App übergeben wird. Sie können die Benutzerdetails unter req.session.user = user in Pass-Authentifizierungsstrategie festlegen. So können Sie auf den Benutzer von jedem Ihrer Route zugreifen.

+0

Das Problem dabei ist, muss ich den Benutzer zu jeder meiner Routen hinzufügen (ca. 30 und mehr). res.locals.user vermeidet dies, da es für die Aufnahme meiner Vorlagendateien geeignet ist. – Goowik

Verwandte Themen