我使用Node,Express和Passport在线教程后创建了一个简单的用户登录应用程序。登录工作正常,但我想获取当前登录用户的用户名,我似乎无法使用。
我的app.js中有以下内容:
/// Configuring Passport
var passport = require('passport');
var expressSession = require('express-session');
app.use(expressSession({
secret: 'cookie_secret',
name: 'cookie_name',
proxy: true,
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session({
secret: 'cookie_secret',
name: 'cookie_name',
proxy: true,
resave: true,
saveUninitialized: true
}));
从我在类似帖子中看到的内容,我需要公开用户名,以便我可以在其他文件中使用它。我尝试在app.js中执行此操作:
app.get('/home', function(req, res) {
res.render('home.jade', { username: req.user.username });
});
Home是我想要使用用户名的路线,我正在尝试使用如下警告来访问用户名:
alert(req.user.username);
这不起作用,req对象未定义......我不确定我缺少什么?
管理让这个工作。在我的app.js中我有:
app.get('/home', function(req, res) {
res.render('home.jade', { username: req.user.username });
});
然后在我的/ home路线中,我可以通过以下方式访问用户名:
req.user.username
答案 0 :(得分:6)
你混合了两件事,一个是客户端,另一个是服务器端,两者都使用javascript但是对于客户端的渲染服务器端代码,你不能直接在客户端使用。您必须像使用
一样传递到视图app.get('/home', function(req, res) {
res.render('home.jade', { username: req.user.username });
});
这里将用户名变量公开给视图
在jade文件中你应该这样做
alert(#{username})
而不是
alert(req.user.username)
答案 1 :(得分:2)
尝试:
app.use(cookieParser());
app.use(session({
secret: 'cookie_secret',
name: 'cookie_name',
proxy: true,
resave: true,
saveUninitialized: true
})
);
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
在控制器上使用 req.user
答案 2 :(得分:1)