我最近从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相关信息。我阅读了很多文章,但未能理解它是如何完成的
答案 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
并且可以正常工作。