[英]Why everyone uses MongoDB for user authentication with Node.Js and Express
[英]MongoDB User Authentication Fails In Node.js Script
首先,必要的序言。 我使用的是 MongoDB 4.0.0 和 mongoDB node.js 驅動程序版本 3.1.1。
我正在嘗試在我的 node.js 腳本中對用戶進行身份驗證。 成功獲取到與 admin 數據庫對應的 Db 對象后,我使用 db.command() 執行身份驗證。 我創建了一個命令文檔,即:
cmd = {
authenticate : 1,
user: g.UserName,
pwd: g.PassWord
}
並將此命令文檔傳遞給 db.command()。 當然,上面指定的必需變量已定義,否則代碼將因 ReferenceError 而停止。
當 db.command() 執行我的回調時,回調會顯示一個 MongoError 對象,其中包含以下內容:
{
code: 2,
codeName: "BadValue",
errmsg: "Auth mechanism not specified",
message: "Auth mechanism not specified",
name: "MongoError",
ok: 0
}
因此,通過查閱 MongoDB 4.0 的文檔,我被告知身份驗證機制應指定為“SCRAM”,因此:
cmd = {
authenticate : 1,
user: g.UserName,
pwd: g.PassWord,
mechanism: "SCRAM"
}
當我將修改后的文檔提供給 db.command() 時,回調會顯示一個不同的 MongoError 文檔:
{
code: 2,
codeName: "BadValue",
errmsg: "Unsupported mechanism: SCRAM",
message: "Unsupported mechanism: SCRAM",
name: "MongoError",
ok: 0
}
然后,我通過“show users”命令在 Mongo shell 中檢查為 admin 數據庫返回的數據,其中包含以下文檔:
{
"_id" : "admin.Calilasseia",
"user" : "Calilasseia",
"db" : "admin",
"roles" : [
{
"role" : "dbOwner",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
{
"_id" : "admin.SuperUser",
"user" : "SuperUser",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
所以在這一點上,我認為,自然地,指定上述文檔中列出的機制之一將解決問題。 除了當我這樣做時,SAME MongoError 文檔被發送到我的回調。
很簡單,我的問題是,為什么這個 db.command() 調用不起作用? 為什么每次我嘗試在我的 node.js 代碼中驗證用戶時都會看到這個 MongoError 文檔?
首先,文檔明確指出我上面構造的cmd對象的機制屬性是可選的。 從該頁面,我們有:
機制字符串 可選。 指定要使用的身份驗證機制。
有關可用機制,請參閱身份驗證機制。
如果未指定,則使用 isMaster 來確定指定用戶的 SASL 機制。 請參閱 saslSupportedMechs。
然而,當我運行代碼時,我被告知這個條目不是可選的,如上所述。 此外,提供文檔中指定的假定有效條目會返回第二個(煩人的)MongoError 文檔。
對這種奇怪的事態的解釋將是受歡迎的。
當我遇到這個問題時,是“mongo”(mongo shell 實用程序)和 mongo db 服務器之間的版本不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.