Как я могу получить имя пользователя текущей сессии, используя Passport.js?

1

Как я могу использовать параметр Passport {user} в моем маршруте users.js который я уже могу получить через routes.js?

Дело в том, что мне нужно получить доступ к параметрам Passport в нескольких новых файлах маршрутов, поэтому мне не нужно, чтобы user 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 querying
}

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 querying 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

Теги:
routes
passport.js
passport-local

2 ответа

1
Лучший ответ

Вам нужно только использовать req.user.username пользователя req.user.username вместо user.username, чтобы иметь доступ к значению имени пользователя Passport.js текущего сеанса.

Кроме того, вам не нужны {user} параметр в вашей router.get функции (users.js файл маршрута).

router.get('/', fcs.isLoggedIn, function(req, res) {

    res.render('users')
    console.log(req.user.username)

})
0

Попробуйте const router = express.Router({mergeParams: true}); , В выражении вы не можете получить доступ к параметрам маршрута родителя по умолчанию.

  • 0
    Я применил его на users.js, он все еще не работает. На самом деле это не может даже сделать users страницы сейчас

Ещё вопросы

Сообщество Overcoder
Наверх
Меню