如何在我的 Web 应用程序中跟踪当前用户?
How can I keep track of current user across my web app?
我正在尝试创建一个与社交媒体平台相似的网络应用程序。我的后端是 MongoDB (Mongoose)、Express.js 和 Node.js。对于路由,我需要跟踪当前用户的用户名,以便我可以使用 api 路由,例如 example.com/username 来获取他们的个人资料。问题是我没有办法知道当前用户的用户名是什么。我考虑过使用 cookie,但这似乎很不安全(我可能是错的)。我也考虑过使用会话,但我读到它们效率不高而且扩展性不好。那么我怎样才能有效地完成这个呢?
我的做法如下:
- 身份验证后,我为用户提供了一个包含 his/her 用户 ID 的 Bearer 令牌。
- 用户必须在所有后续经过身份验证的请求中提供此令牌。
- 使用中间件验证令牌并在请求中附加用户。
登录后
const token = jwt.sign({ _id: user.id.toString() }, 'secret')
user.tokens = user.tokens.concat( { token } )
await user.save()
将此令牌与响应一起发送并存储在数据库中。
在身份验证中间件中做这样的事情
try {
const token = req.header('Authorization').replace('Bearer ', '')
const decoded = jwt.verify(token,'secret')
const user = await User.findOne({_id: decoded._id, 'tokens.token' :token})
if(!user) {
throw new Error()
}
//attach the token and the user upon the request
req.token = token
req.user = user
next()
} catch (e) {
res.status(401).send({error : "Authentication Required"})
}
我正在尝试创建一个与社交媒体平台相似的网络应用程序。我的后端是 MongoDB (Mongoose)、Express.js 和 Node.js。对于路由,我需要跟踪当前用户的用户名,以便我可以使用 api 路由,例如 example.com/username 来获取他们的个人资料。问题是我没有办法知道当前用户的用户名是什么。我考虑过使用 cookie,但这似乎很不安全(我可能是错的)。我也考虑过使用会话,但我读到它们效率不高而且扩展性不好。那么我怎样才能有效地完成这个呢?
我的做法如下:
- 身份验证后,我为用户提供了一个包含 his/her 用户 ID 的 Bearer 令牌。
- 用户必须在所有后续经过身份验证的请求中提供此令牌。
- 使用中间件验证令牌并在请求中附加用户。
登录后
const token = jwt.sign({ _id: user.id.toString() }, 'secret')
user.tokens = user.tokens.concat( { token } )
await user.save()
将此令牌与响应一起发送并存储在数据库中。
在身份验证中间件中做这样的事情
try {
const token = req.header('Authorization').replace('Bearer ', '')
const decoded = jwt.verify(token,'secret')
const user = await User.findOne({_id: decoded._id, 'tokens.token' :token})
if(!user) {
throw new Error()
}
//attach the token and the user upon the request
req.token = token
req.user = user
next()
} catch (e) {
res.status(401).send({error : "Authentication Required"})
}