php串連MongoDB使用者認證錯誤
主要錯誤資訊:
authentication failed MONGODB-CR credentials missing in the user document
MongoDB在啟用–auth之後就無法在php中連結mongodb了,提示使用者驗證失敗
laravel報錯:
ErrorException in 29a407fb57431b351434fab7e1c79ec5 line 5:
Failed to connect to: localhost:27017: Authentication failed on database ‘laravel’ with username ‘laravel’: auth failed
看代碼,是按照php manual中標準的寫的啊,庫裡是有這個使用者的,使用者名稱密碼也沒錯,但是為什麼驗證通不過呢:
$m = new MongoClient("mongodb://${username}:${password}@localhost", array("db" => "myDatabase"));
查看mongo控制台,發現報的錯是:
Failed to authenticate laravel@laravel with mechanism MONGODB-CR : authentication failed MONGODB-CR credentials missing in the user document
使用者文檔中沒有MONGODB-CR,這是什麼鬼。
經過一番折騰發現國內居然沒有任何關於這個錯誤的解決方案。
無奈Google到一篇部落格:
[https://code4foodblog.wordpress.com/2015/03/31/authenticationfailed-mongodb-cr-credentials-missing-in-the-user-document/] 這是一種解決方案
上mongo的官方文檔中尋找一番,關於mongodb的認證機制:
MongoDB’s default authentication method is a challenge and response mechanism (SCRAM-SHA-1). Previously, MongoDB used MongoDB Challenge and Response (MONGODB-CR) as the default.
mongo3.0之後就不使用MONGO-CR作為預設的使用者認證方式了,預設的是SCRAM-SHA-1
趕快到phpinfo mongo部分看到:
Supported Authentication Mechanisms |
- |
MONGODB-CR (default) |
enabled |
MONGODB-X509 |
enabled |
GSSAPI(Kerberos) |
enabled |
PLAIN |
enabled |
這哪有什麼SCRAM-SHA-1啊
果然,根源在於php的mongodb 驅動沒更新,汗
在[https://pecl.php.net/package/mongo]找到正確的驅動,果斷通過了,一個小問題折騰了好久