【发布时间】:2017-08-24 01:18:43
【问题描述】:
我正在尝试使用未使用 express 的原始 node.js 存储客户端会话。
当用户登录时,我有用户名和密码。现在,如何使用 cookie 在客户端浏览器中存储会话。以及如何在用户刷新选项卡或转到另一个链接时识别用户。我不想使用client-sessions 模块,因为我想了解这种方法。
任何帮助将不胜感激。
【问题讨论】:
标签: node.js session cookies client
我正在尝试使用未使用 express 的原始 node.js 存储客户端会话。
当用户登录时,我有用户名和密码。现在,如何使用 cookie 在客户端浏览器中存储会话。以及如何在用户刷新选项卡或转到另一个链接时识别用户。我不想使用client-sessions 模块,因为我想了解这种方法。
任何帮助将不胜感激。
【问题讨论】:
标签: node.js session cookies client
首先,我建议你看 everything about authentication in NodeJS它很好地解释了cookie。
您必须为浏览器提供一些数据以供以后使用,即cookies。浏览器使用此数据向服务器显示它在之前处理了哪些类型的身份验证,以便服务器和用户继续进行而无需重复。 p>
在node.js中,使用client-sessions模块,可以通过调用设置cookie
app.post('/login', function(req,res){
User.findOne({password: req.body.userPassword}, function(err, user){
if(user){
req.session.user = user; //here you are setting the cookie for the client,
}
})
})
您还可以通过添加属性来指定要设置的 cookie 类型
req.session.userEmail = user.email;
现在让我们检查一下服务器如何使用身份验证
app.get('/someUrl', function(req,res){
if(req.session.user){
console.log("user exists!");
}
})
您可以使用req 对象的session 属性=> req.session
要将它与你需要做的数据库绑定,
if(req.session.user){
User.findOne({email: req.session.user.email}, func...)
}
因此,基本上,对于客户端发送的每个请求,服务器都会使用此过程来识别 cookie 并使 Web 应用程序对用户友好且不重复。
这就像在学校给每个学生一个ID以进行身份验证。
安全
为了安全,我们在app.use()函数中添加secret属性时,节点模块cookie-sessions会自动加密数据。请看using secret in client-sessions module
【讨论】:
app.use()函数中使用secret属性时,它会自动加密数据。