如何使用Passport.js获取当前会话的用户名?

如何在路由users.js使用Passport的{user}参数,我可以通过routes.js访问这些routes.js

这种情况是我需要在多个新的路由文件中访问Passport参数,所以我不需要使用routes.js作为包含所有应用程序路由的唯一文件。

app.js – 我只隔离感兴趣的部分

 const express = require('express') const session = require('express-session') const cookieParser = require('cookie-parser') const bodyParser = require('body-parser') const passport = require('passport') const flash = require('connect-flash') const app = express() app.use(session({ secret: 'stackoverflow', resave: true, saveUninitialized: true, })) app.use(passport.initialize()) app.use(passport.session()) app.use(flash()) const index = require('./routes/index') const users = require('./routes/users') require('./config/passport')(passport) // I believe that (app, passport) enables the routes.js to have access to {user} parameter require('./routes/routes.js')(app, passport) // load routes and pass in our app and fully configured passport app.use('/', index) app.use('/users', users) module.exports = app; 

functions.js – 我的全局函数文件

 const express = require('express') const router = express.Router() const db = require('../db/Conf') module.exports.isLoggedIn = function isLoggedIn(req, res, next) { if (req.isAuthenticated()) return next() res.redirect('/notloggedin') } module.exports.fdb = function fdb(mypar, callback) { // some stuff for quering } 

routes.js – 这里的{user}参数输出它的价值没有问题

 const fcs = require('../routes/functions') module.exports = (app, passport) => { app.get('/login', (req, res) => { res.render('login.ejs', { message: req.flash('loginMessage') }) }); app.post('/login', passport.authenticate('local-login', { //login stuff }); app.get('/profile', fcs.isLoggedIn, ({ user }, res) => { res.render('profile.ejs', {user}) // gets the user out of session and pass to template which is OK console.log('User is: ', user.username) }); }; 

users.js – >我希望能够使用Passport的{user}参数,我已经可以在routes.js

 const express = require('express') const router = express.Router() const db = require('../db/Conf') const fcs = require('../routes/functions') router.get('/', fcs.isLoggedIn, function(req, res, {user}) { // some mysql quering stuff using my function fcs.fdb res.render('users') // Undefined -> Trying to get the {user} value through Passport console.log(user.username) }) module.exports = router 

基于https://github.com/RosieCode95/node-express-passport-mysql

您只需使用req.user.username而不是user.username即可访问当前会话的Passport.js用户名值。

你也不需要你的router.get函数中的{user}参数( users.js路由文件)。

 router.get('/', fcs.isLoggedIn, function(req, res) { res.render('users') console.log(req.user.username) }) 

试试const router = express.Router({mergeParams: true}); 。 在express中,默认情况下不能访问父路由参数。