如何区分经过身份validation的用户在客户端与Passport和node.js?

我使用Passport.jsMongoStore进行身份validation,我使用express作为Web框架。 一旦用户login,他就可以访问某个路线上的内容。

我想提供不同的内容,取决于哪个用户已authentication 。 比方说,在Mongo的members集合中,每个members都拥有一个categoryprivileges属性,然后我将决定向他展示什么。

我将使用AngularJS来绑定和呈现HTML。

这是我的路线pipe理:

 app.get('/',function (request, response) { if(request.isAuthenticated()) response.redirect('/admin') else response.sendfile("public/index.html") }) app.get('/admin',function (request, response) { if(request.isAuthenticated()) response.sendfile("views/admin.html") else response.redirect('/') }) app.post('/login', passport.authenticate('local', { successRedirect: '/admin', failureRedirect: '/' }) ) app.get('/logout', function (request, response){ request.session.destroy(function (err) { response.redirect('/'); //Inside a callback… bulletproof! }) }) app.get('*',function (request, response) { response.redirect('/') }) 

这是我的Passport.js代码:

 mongoose.connect('mongodb://localhost/integraDB') var Schema = mongoose.Schema var userCredential = new Schema({ username: String, password: String }, { collection: 'members' }) var userCredentials = mongoose.model('members', userCredential) app.use(session({ clear_interval: 900, cookie: { maxAge: 2 * 60 * 60 * 1000 }, store: new MongoStore({ db : mongoose.connection.db }) })); passport.serializeUser(function(user, done) { done(null, user); }) passport.deserializeUser(function(user, done) { done(null, user); }) passport.use(new LocalStrategy(function(username, password, done) { process.nextTick(function() { userCredentials.findOne({ 'username': username, }, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false); } if (user.password != password) { return done(null, false); } return done(null, user); }); }); })) 

我怎样才能做到这一点?

没有魔杖可以挥手来实现这一点。 护照将deserializeUser的结果存储在req.user (您正在使用会话,正确)?

如果我们想根据用户angular色做一些不同的事情,我们有两个select。 一个是提出一个不同的观点:

 exports.home = function(req, res) { if (!req.user) { return res.render('anon'); } else if (req.user.role === 'basic') { return res.render('basic'); } else if (req.user.role === 'advanced') { return res.render('advanced'); } return res.send(500); }; 

另一个是将req.user.role传递给你正在使用的渲染引擎(我将在这里使用ejs):

 exports.home = function(req, res) { var userRole = req.user ? req.user.role : 'anon'; res.render('home', { role: userRole }); }; 

然后在home.ejs

 <% if (role === 'basic') { %> <!-- basic menu --> <% } else if (role === 'advanced') { %> <!-- advanced menu --> <% } %>