2013-07-03 51 views
0

我正在用mongodb使用nodejs(express),我试图弄清楚cookie是如何工作的。我目前能够让用户登录并进行身份验证。如何启用cookie以及如何使用cookie在用户的信息中查询mongodb,以便在登录后将其拉到下一页和其后的页面中。如何在nodejs和mongodb中使用cookie?

目前我有一个路由文件发布登录请求,然后根据成功重定向到userProfile页面,我想在该页面上包含用户特定的详细信息,然后能够显示用户其他页面并让他返回到他在查询时再次浏览他的独特页面。

更新的代码:(?能浏览器来把它称为是所谓的更新代码的方式)

登陆后路径文件

exports.loginPost = function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
     if (err) { return next(err) } 
     if (!user) { return res.redirect('loginError'); } 
     req.logIn(user, function(err) { 
      if (err) { return next(err); }  
      res.cookie('name', req.params.email, { expires: new Date(Date.now() + 900000), httpOnly: true });  
      return res.redirect('userProfile'); 
     }); 
    })(req, res, next); 
}; 
+0

尝试使用cookieParser http://expressjs.com/api.html#cookieParser – AntouanK

+0

我明白,但例如我有一个cookieparser从我的主要app.js文件表达。我如何设置它,以及登录时必须在哪里设置?我怎么用它来查询呢?如果可以显示一个很好的例子,我附上我的代码。 – Lion789

+0

我有同样的问题,因为明确的文件是...最小。尝试谷歌它,看看例子。 – AntouanK

回答

1

读这首What does middleware and app.use actually mean in Expressjs?

然后使用cookieparser和cookiesession

app.use(express.cookieParser('yoursecretkeyhere')); 
app.use(express.cookieSession(); 

并拆分您的上述功能转换为认证中间件方法和认证POST处理程序。

您的身份验证中间件只需检查会话是否有Authenticated标志,如果不是重定向到您的登录页面。 (如果这是单页面应用程序的一部分,只需返回一个401并在您的浏览器中索要凭据)

您的身份验证POST处理程序然后检查发布的用户名和密码凭证(或针对第三方API的其他凭证)和设置session.Authenticated标志,然后是重定向。

+0

我不能只是坚持它在登录帖子是这样的:res.cookie('name',req.params.email,{expires:new Date(Date.now()+ 900000),httpOnly:true });认证之后。 – Lion789

+1

不知道我明白。 cookieSession是中间件,它将任何添加到会话对象中的内容存储到加密的cookie中。您的浏览器会根据每个请求将cookie发送到您的服务器,cookieSession会读取它并将所有值填充到您的会话中。你不应该把东西放在一个应该防篡改的未加密的cookie中。 – AndyD