gpt4 book ai didi

javascript - 在 Node.js 和 Express 中使用 Angular 色进行日志记录

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:46 26 4
gpt4 key购买 nike

我是 Node.js 和 Express 的新手,我在 Passport 的访问控制方面遇到问题。
我想检查用户登录的是哪个 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);
});
});
}

app.js 文件的一小部分,我在其中设置全局变量 user

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

我使用全局用户变量的layout.pug文件的一部分

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

我想要做的是检查用户是否具有管理员 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 为 null,那么您无法检查 null 的属性“admin”

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

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

关于javascript - 在 Node.js 和 Express 中使用 Angular 色进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45404666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com