在Node.js和Express中loggingangular色

我是Node.js和Express中的新成员,并且使用Passport访问控制存在问题。
我想检查用户login的angular色。
我的用户架构:

let mongoose = require('mongoose'); let userSchema = new mongoose.Schema({ name:{ type: String, required: true }, email:{ type: String, required: true }, password:{ type: String, required: true }, username:{ type: String, required: true }, role:{ type: String, default: 'user' }, activated:{ type: Boolean, default: false } }); let User = module.exports = mongoose.model('User', userSchema); 

我的passport.js文件

 const LocalStrategy = require('passport-local').Strategy; const User = require('../models/user'); const dbConfig = require('../config/database'); const bcrypt = require('bcrypt'); module.exports = (passport) => { //Local Strategy passport.use(new LocalStrategy((email, password, done) => { //Match email let query = {email: email} User.findOne(query, (err, user) => { if(err){ console.log(err); } if(!user) { return done(null, false, {message: 'No user found'}); } //Match password bcrypt.compare(password, user.password, (err, isMatch) => { if(err){ console.log(err); } if(isMatch){ return done(null, user); } else { return done(null, false, {message: 'Wrong password'}); } }); }); })); passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); }); } 

我设置全局variables用户的app.js文件的一小部分

 app.get('*', (req, res, next) => { res.locals.user = req.user || null; next(); }); 

我正在使用全局用户variables的layout.pug文件的一部分

 .navbar.collapse.navbar-collapse ul.nav.navbar-nav li a(href='/') Home if user li a(href='/articles/add') Add article 

我想要做的是检查用户是否具有pipe理员angular色。 我试图以不同的方式做到这一点,但没有成功。 我想检查在app.js中的angular色,但我得到的错误:

 if(req.user.role == 'admin'){ res.locals.admin = req.user; } 

此外,我只想通过passport.js中的angular色,它正在工作,但我也需要用户的其他属性。

 passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); }); 

我该如何解决我的问题?

你应该检查是否req.isAuthenticated()然后检查angular色。 因为如果req.user是空的,那么你不能检查空属性“pipe理员”

 if(req.isAuthenticated() && req.user.role == 'admin'){ res.locals.admin = req.user; } 

req.isAuthenticated()函数由passport.js提供