我创建了一个简单的网站,用户必须在其中注册并订阅一些激活的挑战。我使用护照进行注册和登录表单,并将用户电子邮件和密码保存到我的数据库中。问题是当我尝试在另一个页面中使用用户电子邮件时。 一旦用户完成登录,我的应用程序会将他重定向到个人资料页面,然后我可以从数据库中检索数据,但是当我尝试在另一个页面中使用数据时,我无法做到。 有人知道如何解决这个问题吗?
我的护照档案
passport.use('local-login', new LocalStrategy({
// by default, local strategy uses username and password, we will override with email
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true // allows us to pass back the entire request to the callback
},
function(req, email, password, done) { // callback with email and password from our form
// find a user whose email is the same as the forms email
// we are checking to see if the user trying to login already exists
User.findOne({ 'local.email' : email }, function(err, user) {
// if there are any errors, return the error before anything else
if (err)
return done(err);
// if no user is found, return the message
if (!user)
return done(null, false, req.flash('loginMessage', 'No user found.')); // req.flash is the way to set flashdata using connect-flash
// if the user is found but the password is wrong
if (!user.validPassword(password))
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); // create the loginMessage and save it to session as flashdata
// all is well, return successful user
return done(null, user);
});
}));
这是我的重定向页面
app.get('/login', function(req, res) {
// render the page and pass in any flash data if it exists
res.render('login.ejs', { message: req.flash('loginMessage') });
});
// process the login form
// app.post('/login', do all our passport stuff here);
app.post('/login', passport.authenticate('local-login', {
successRedirect : '/partecipant', // redirect to the secure profile section
failureRedirect : '/login', // redirect back to the signup page if there is an error
failureFlash : true // allow flash messages
}));
我的partecipant页面,在这里我可以使用这个变量
检索数据
<p>id: <%= user.id %></p>
<p>email:<%= user.local.email %></p>
<p>password: <%= user.local.password %></p>
这是另一个页面,我尝试使用与partecipant页面中使用的相同的变量,但它没有工作
<section id="wrapPartecipant1">
<p>email:<%= user.local.email %></p>
</section>
答案 0 :(得分:0)
使用Passport对用户进行身份验证后,用户应存储在req.user
。
app.get('/particepant', function(req, res) {
console.log(req.user);
});
然后您可以创建一个local variable that is accessible to all views。您可以在中间件中设置此变量。
app.use(function(req, res, next) {
res.locals.user = req.user;
next();
});
app.get('/particepant', function(req, res) {
console.log(req.user);
});
// and other routes