使用Passport JS获取当前登录的用户名?

时间:2016-03-21 01:28:26

标签: javascript node.js express passport.js

我使用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

3 个答案:

答案 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)

{username:user.local.username}

请使用以下链接

https://github.com/hnagarkoti/passportauthenticationWorking