Как получить профиль текущего пользователя в узле js

Я использую MEAN Stack и мангуст. Использование паспорта для аутентификации. Я хочу получить зарегистрированного пользователя и отобразить его данные. Например, если я вошел в систему и если я захожу на страницу профиля, я хочу получить свои данные. В интернете было всего несколько ресурсов.

Login.js (паспорт и маршруты здесь)

var express = require('express');
var router = express.Router();

var passport = require('passport');

var LocalStrategy = require('passport-local').Strategy;

var User = require('../models/user');

var ConnectRoles = require('connect-roles');


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

res.render('Login', { title: 'Login' });
});

passport.serializeUser(function(user, done) {

    done(null, user._id);
});

passport.deserializeUser(function(id, done) {

    User.findById(id, function(err, user) {

    done(err, user);
    });
});

passport.use("/", new LocalStrategy(

     function(username, password, done) {

        User.findOne({ username: username }, function(err, user) {

            if (err) { return done(err); }
            if (!user) {
                return done(null, false,
                 { message: "No user has that username!" });
            }
            user.checkPassword(password, function(err, isMatch) {

            if (err) { return done(err); }
                if (isMatch) {

                    return done(null, user);
                } else {
                    return done(null, false,
                 { message: "Invalid password." });
            }
        });
    });
}));

router.use(function(req, res, next) {

    res.locals.currentUser = req.user;

    res.locals.errors = req.flash("error");

    res.locals.infos = req.flash("info");
    next();
});

router.post("/", passport.authenticate("/", {

    successRedirect: "/SubmitSurvey",
    failureRedirect: "/",
    session: false,
    failureFlash: true
}));


router.get("/AdminDatabase", function(req, res) {

   res.render('AdminDatabase', { title: 'AdminDatabase' });

 });


router.get('/CreateSurvey', function(req, res, next) {

  res.render('CreateSurvey', { title: 'CreateSurvey' });

});


router.get('/SubmitSurvey', function(req, res, next) {

  res.render('SubmitSurvey', { title: 'SubmitSurvey' });

});


router.get('/profile', function(req, res, next) {

  res.render('profile', { title: 'profile' });

});


router.get("/Logout", function(req, res) {

    req.logout();

    res.redirect("/");
});

module.exports = router;

Как я могу сделать это в nodejs

3 ответа

Это на req.user объект

router.get('/profile', function(req, res, next) {

    //here it is
    var user = req.user;

    //you probably also want to pass this to your view
    res.render('profile', { title: 'profile', user: user });
});

паспорт заполняет req.user Объект с текущим пользователем через промежуточные программы, так что вы можете извлечь его оттуда.

Как сказал Алекс, вы можете явно передать некоторую переменную (например, ваш req.user) при звонке res.render:

router.get('/profile', function(req, res, next) {
    res.render('profile', { title: 'profile', user: req.user });
});

Вместо этого, возможно, вы хотели бы некоторые переменные (как это req.user) быть доступным во всех звонках res.render не удосужившись указывать их каждый раз? В этом случае вы можете использовать res.locals Например, добавив это промежуточное ПО:

app.use(function(req, res, next){
  res.locals.user = req.user;
  next();
});

И, наконец, для полноты - в обоих подходах выше переменная user доступен для вас в представлении. Например, если вы используете шаблон pug, вы можете теперь сделать что-то вроде:

if user
  p Hello, #{user.id}, good to see you!
else
  p Please log in...
Другие вопросы по тегам