使用SCRAM-SHA-1在mongoose中进行身份验证

时间:2015-07-14 05:33:15

标签: mongoose

我最近从MongoDB 2.6升级到3.0.4,并将Mongoose版本升级到4.0.0。

现在我尝试使用mongoose连接到mongo:

mongoose.connect('mongodb://user:password@host:port/dbname')

在mongo日志中,我收到此消息

  

来自客户端的dbname上的用户SCRAM-SHA-1身份验证失败   xxx.xxx.xxx.xxx

我在mongodb中检查过,用户存在于admin中。我使用的命令是 db.system.users.findOne({user:'user'})

此语句返回的信息包含SCRAM-SHA-1信息。

我的问题是如何在建立连接时在mongoose中指定SCRAM相关信息。我阅读了很多文章,但未能理解它是如何完成的

3 个答案:

答案 0 :(得分:7)

找到解决方案,我没有通过authDatabase名称,这就是连接失败的原因。早些时候我正在使用这个

mongoose.connect('mongodb://user:password@host:port/dbname')

现在我用了这个

mongoose.connect('mongodb://user:password@host:port/dbname?authSource=dbWithUserCredentials')

在Mongoose本身的Discussion thread找到了这个解决方案

修改

不要忘记用自己的dbWithUserCredentials替换mongoose.connect()。在大多数情况下,dbWithUserCredentials将是admin。所有用户名,密码等登录凭据都已在传递给<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Service</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.service</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> 的参数中指定。

答案 1 :(得分:6)

我有类似的问题。在将mongoose更新为v4.1.11之后修复了它。

答案 2 :(得分:0)

更改为Mongoose版本4.0.3并且可以正常工作。