【问题标题】:User.findOne is looping over in object destructuring string keyUser.findOne 在对象解构字符串键中循环
【发布时间】: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


    【解决方案1】:

    讲师没有使用对象解构循环数组,而是使用mongodb 语法在数组中搜索您事先不知道索引的文档。

    如果您不知道嵌套在数组中的文档的索引位置,请将数组字段的名称用点 (.) 与嵌套文档中的字段名称连接起来。

    https://docs.mongodb.com/manual/tutorial/query-array-of-documents/#specify-a-query-condition-on-a-field-embedded-in-an-array-of-documents

    【讨论】:

    • 谢谢,还有一件事。您的网站具有暗模式,即使在刷新后它也会保持暗模式。你是怎样做的?使用 localstorage 保存状态?
    • 是的,使用localStorage 是一种处理方式,这就是我目前使用的方式。您还可以为prefers-color-scheme 添加媒体查询。当你用谷歌搜索时,有很多关于这个主题的文章。
    • 我尝试使用 localstorage,但不知何故无法正常工作,您能给我看一个代码示例,说明如何为暗模式设置上下文吗?
    • @ProttayRudra 我刚刚给你发了一封电子邮件
    猜你喜欢
    • 2019-01-03
    • 2019-07-02
    • 2021-05-27
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多