您好我正在尝试使用passport进行本地登录。一切正常但是我希望能够在用户通过身份验证后显示用户名是使用Node.js和mysql的代码:
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true // allows us to pass back the entire request to the callback
},
function(req, email, password, done) {
var status = [];
console.log('-----');
connection.query('SELECT username FROM user WHERE email ="' + email + '"', function(err, rows) {
if (err)
return done(err);
if (rows.length) {
status.push({
username: rows[0].username
});
done(null, JSON.stringify(status)); //output as JSON
//console.log(JSON.stringify(status));
//res.render ('"status":'+JSON.stringify(status));
}
});
}
));
app.post('/login', passport.authenticate('local', {
successRedirect: '/loginSuccess',
failureRedirect: '/loginFailure',
failureFlash: false
}));
app.get('/loginFailure', function(req, res, next) {
res.send('Failed to authenticate');
});
app.get('/loginSuccess', function(req, res, next) {
res.send('Successfully authenticated');
});
答案 0 :(得分:1)
假设您的身份验证工作正常,Passport使用的用户数据会在每次请求时存储在req.user变量中。将req.user变量传递给视图将为您提供用户信息。
另请查看护照使用的serializeUser()和deserializeUser()函数。您不会在代码中显示它们,但是护照需要它们才能使会话正常工作。基本上,您的LocalStrategy对用户进行身份验证,serializeUser()函数准备会话数据,deserializeUser()函数读取会话数据并创建req.user变量。