私はオンラインコースに参加しています。インストラクターが、使用してユーザーを検索/検証しようとしていると言い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
一致するかどうかを確認すると言っています。
ご参考までに、認証トークン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
ループしようとしているように見えます。
私は正しいですか?私がそうなら、彼はどのようにしてオブジェクトの破壊でループを使用できますか?