[英]Nodejs - User Data on login to front-end
我已經構建了幾個其他expressjs應用程序,但是我找不到如何將用戶模型傳遞到前端或將其作為參數放入req中。
該應用程序是單頁Web應用程序,因此用戶使用登錄表單發布到/ login:
app.post('/login', require('./app/controllers/user').login);
控制器將其拾取並調用特定模塊以處理請求:
exports.login = function (req,res) {
AccountHandler.login(req,function (response) {
if (response.code < 0) {
req.flash('error', response.msg);
}
else if (response.code > 0) {
req.flash('success', response.msg);
}
req.user = response.user;
res.redirect(response.url);
});
}
這是處理登錄並通過傳遞所需參數來調用回調的模塊:
exports.login = function (req,callback) {
process.nextTick(function () {
User.findOne({ 'valid.email': req.body.Email }, function (err, user) {
if (err) {
callback({url: '/#login', msg: "There was an unexpected error!", code: -10});
}
if (!user) {
callback({url: '/#login', msg: "No such email/password combination was found", code: -1});
}
if (user) {
easyPbkdf2.verify(user.valid.salt, user.valid.password, req.body.Password, function (err, valid) {
if (!valid){
callback({url: '/#login', msg: "No such email/password combination was found", code: -1});
}
else{
callback({user: user, url: '/', msg: "acknowledged", code: 10});
}
});
}
});
});
}
在控制器中,我說的是req.user = response.user;
它不會持續存在,並且當用戶重定向到“ /”時,req.user仍為空。 如何將該用戶信息保留在重定向頁面上?
如果我的理解是正確的,則res.redirect()調用實際上將導致瀏覽器重定向到給定的url,這將導致對您的快速服務器的新請求。 由於是新請求,因此舊的req對象不再相關。 我認為您想要的是使用快速會話中間件存儲登錄用戶的會話。 那里有很多很好的例子。這是一個 。
因此,解決方案是使用會話+中間件邏輯/功能。
這是設置(exrepssjs):
使用快速會話模塊:
var sessionMiddleware = session({
resave: true,
saveUninitialized: true,
httpOnly: true,
genid: function(req) {
return uuid.v1() // I used another module to create a uuid
},
secret: 'random secret here',
cookieName: 'session', // if you dont name it here it defaults to connectsid
});
下面創建一個中間件,以便您按以下方式處理每個請求的會話(簡化后,我對用戶超時進行了查找,並將其傳遞回前端):
app.use(function(req, res, next) {
res.locals.success_messages = req.flash('success_messages');
res.locals.error_messages = req.flash('error_messages');
if (req.session && req.session.user) {
User.findOne({ email: req.session.user.email }, function(err, user) {
if (user) {
req.user = user;
delete req.user.password; // delete the password from the session
req.session.user = user; //refresh the session value
res.locals.user = user;
}
// finishing processing the middleware and run the route
next();
});
} else {
next();
}
});
現在,大多數時候從前端使用ejs或jade,您都可以使用“ user”變量訪問用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.