User.findOne зацикливается на строковом ключе разрушения объекта - PullRequest
0 голосов
/ 22 января 2020

Я иду с онлайн-курсом, есть часть, где инструктор говорит, что пытается найти / проверить пользователя, используя User.findOne, и передает некоторые условия, чтобы найти запрошенного пользователя. Чтобы передать значение, он использует деструктуризацию объекта. Вот указанный c код:

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 будет l oop по всем токенам, доступным в указанном user объекте, чтобы проверить, соответствует ли данный token.

И если вам интересно, вот пример один user, который содержит auth токены:

  {
        "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 инструктор пытается l oop над пользователя токены массив, соответствующий правильному токену.

Я прав? Если я, как он может использовать l oop в разрушении объектов?

1 Ответ

1 голос
/ 22 января 2020

Инструктор не выполняет циклический перебор массива с использованием деструктуризации объекта, но использует синтаксис mongodb для поиска документа в массиве, в котором вы не знаете индекс до этого.

Если вы не знать позицию индекса документа, вложенного в массив, объединить имя поля массива с точкой (.) и именем поля во вложенном документе.

https://docs.mongodb.com/manual/tutorial/query-array-of-documents/#specify -a-запрос условие на-поле встраиваемый-в-в-массиве-оф-документов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...