可以通过 Mongo shell 但不是应用程序连接到 Heroku 中的 MongoDB

Can connect to MongoDB in Heroku through Mongo shell but not application

我在 heroku 中设置了一个 scala play reactive-mongo 应用程序。 Mongo 由 mlab 在 heroku 中提供。通过应用程序连接到 mongo 时有点问题,使用相同的凭据通过 shell 连接工作正常。我正在使用 scala play 2.5.1 和 reactive 0.11.11,mongod 是 3.0.8。我认为所有这些版本都可以协同工作,但我在启动时遇到身份验证错误:

2016-04-18T06:59:54.357736+00:00 app[web.1]: [info] application - ReactiveMongoApi starting...
2016-04-18T06:59:54.586309+00:00 app[web.1]: [info] application - ReactiveMongoApi successfully configured with DB 'heroku_0pps6l5f'! Servers:
2016-04-18T06:59:54.586332+00:00 app[web.1]:        [ds051635.mlab.com:51635]
2016-04-18T06:59:55.101238+00:00 heroku[router]: at=info method=POST path="XXXXX" host=YYYYYY request_id=ec31a3df-88a1-4dc4-b195-5d39280db41b fwd="90.200.12.189" dyno=web.1 connect=0ms service=2382ms status=200 bytes=137
2016-04-18T06:59:56.010123+00:00 app[web.1]: [error] r.c.a.MongoDBSystem - authentication failure
2016-04-18T06:59:56.010133+00:00 app[web.1]: reactivemongo.core.commands.FailedAuthentication: BSONCommandError['auth failed'] with original doc {
2016-04-18T06:59:56.010134+00:00 app[web.1]:   ok: BSONDouble(0.0),
2016-04-18T06:59:56.010135+00:00 app[web.1]:   errmsg: "auth failed",
2016-04-18T06:59:56.010135+00:00 app[web.1]:   code: BSONInteger(18)
2016-04-18T06:59:56.010136+00:00 app[web.1]: }

在随后的插入中,我没有收到错误,但实际上没有插入任何内容。
检索时出现以下错误:

2016-04-18T07:05:56.742757+00:00 app[web.1]: Caused by: java.lang.RuntimeException: (,List(ValidationError(List('n' is undefined on object: {"ok":0,"errmsg":"not authorized on heroku_0pps6l5f to execute command { count: \"sightings\" }","code":13}),WrappedArray())))

ReactiveMongo 默认使用 MONGODB-CR 身份验证,以实现向后兼容目的(这应该为 0.12 更改)。

使用新的 MongoDB 3.x 时,需要 SCRAM-SHA1 身份验证。因此,请确保此 option is enable with ReactiveMongoauthMode=scram-sha1(在连接 URI 中)。