【发布时间】:2020-03-27 01:31:41
【问题描述】:
我正在参加在线课程,有一部分讲师说他正在尝试使用User.findOne 查找/验证用户并通过一些条件来查找请求的用户。为了传递值,他使用对象解构。具体代码如下:
const token = req.header("Authorization").replace("Bearer ", "");
const decoded = jwt.verify(token, "secret key here!");
// issue is here, look at the second property of the findOne function's argument.
const user=await User.findOne({_id: decoded._id, 'tokens.token': token})
讲师在'tokens.token' 中使用字符串键。他的意思是,mongodb 将遍历指定user 对象中可用的所有令牌,以检查给定的token 是否匹配。
如果您想知道,这里有一个包含 auth 令牌的单个 user 示例:
{
"name": "Prottay",
"_id": "5e27f23b6b549b4c28b8ac35",
"password": "$2a$08$gUfMwk6TNWViHihrcxjKg.8EXD04lLkGIWXqzrf8wYokdLQXHxpdy",
"tokens": [
{
"_id": "5e27f23b6b549b4c28b8ac36",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZTI3ZjIzYjZiNTQ5YjRjMjhiOGFjMzUiLCJpYXQiOjE1Nzk2NzYyMTl9.-PWXzlEoPlEZn9F_awtzqrXOtByxUCW9RCdchHF1yKE"
},
{
"_id": "5e280429596e742dcc2f9e30",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZTI3ZjIzYjZiNTQ5YjRjMjhiOGFjMzUiLCJpYXQiOjE1Nzk2ODA4MDl9.7W-QZ55Cc3NFd_-NPyJ0VW_5F1UVrDWAV4xHX63D6tc"
},
{
"_id": "5e280435596e742dcc2f9e31",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZTI3ZjIzYjZiNTQ5YjRjMjhiOGFjMzUiLCJpYXQiOjE1Nzk2ODA4MjF9.vppisFiNNC_DYHtGK0IURzEOCCC5zcWl1v9yD6l1D4I"
}
],
"__v": 3
},
在我看来,使用 'tokens.token': token 讲师正在尝试在 user's tokens 数组上循环以匹配正确的令牌。
我说的对吗?如果我是他怎么能在对象解构中使用循环?
【问题讨论】:
标签: javascript arrays mongodb mongoose object-destructuring