0

正如标题所述,我使用的是django-mongodb-engine,我试图配置本地Django认证框架。我已经在网上阅读了一些评论,它应该可以开箱即可使用某些功能。但是,我找不到任何教程,此外,我尝试单独设置它时出现错误。我最关心的问题是与数据库权限有关。我已经按照Django docs包含了Django中间件和应用程序。但是,当我发出syncdb命令时,它会失败并显示错误。django-mongodb-engine和Django的本地认证系统

$ python manage.py syncdb 
OperationFailure: database error: not authorized for query on MyDB.system.namespaces 

settings.py

DATABASES = { 
    'default': { 
     'ENGINE': 'django_mongodb_engine', 
     'NAME': 'MyDB', 
     'USER': 'mySuperUser', 
     'PASSWORD': 'mypass', 
     'HOST': 'XXX.XXX.XXX.XXX', 
     'PORT': '', 
    }, 
    # some other DBs 
} 

蒙戈用户权限

myDB> db.system.users.find() 
{ "_id" : ObjectId("..."), "user" : "mySuperUser", "pwd" : "...", "roles" : [ "readWriteAnyDatabase", "userAdminAnyDatabase",   "dbAdminAnyDatabase", "clusterAdmin" ] } 

我不知道还有什么其他的权限,我可以给予这个家伙,和/或其他地方,我需要创建这个用户。

任何想法?

回答

0

玩过后,这里是解决方案。您必须使用本地mongo admin数据库。因此,需作修改:

# settings.py 
DATABASES = { 
    'default': { 
     'ENGINE': 'django_mongodb_engine', 
     'NAME': 'admin', 
     'USER': 'mySuperUser', 
     'PASSWORD': 'mypass', 
     'HOST': 'XXX.XXX.XXX.XXX', 
     'PORT': '', 
    }, 
    # some other DBs 
} 

用户mySuperUser必须自然admin数据库上存在。为了安全地进行认证操作,例如添加和删除用户,我给了它mongo的userAdminAnyDatabase权限。权限可能过大,但我必须使用它来确定所需权限的适当范围。下面是权限:

// mongo 
admin> db.system.users.find() 
{ "_id" : ObjectId("..."), "pwd" : "...", "roles" : [   "readWriteAnyDatabase",   "dbAdminAnyDatabase", "clusterAdmin",   "userAdminAnyDatabase" ], "user" : "mySuperUser" } 

接下来,我们终于可以运行syncdb命令:

$ python manage.py syncdb 
Creating tables ... 

You just installed Django's auth system, which means you don't have any superusers defined. 
Would you like to create one now? (yes/no): yes 
Username (leave blank to use 'someUser'): 
Email address: [email protected] 
Password: 
Password (again): 
Superuser created successfully. 
Installing custom SQL ... 
Installing indexes ... 

Installing indices for admin.LogEntry model. 
Installing indices for auth.Group_permissions model. 
Installing indices for auth.Group model. 
Installing indices for auth.User_groups model. 
Installing indices for auth.User_user_permissions model. 
Installing indices for auth.User model. 
Installing indices for sessions.Session model. 
Installed 0 object(s) from 0 fixture(s) 
$ 
0

我遇到了同样的问题。我的Mongo DB在MongoLab上托管,我没有找到任何解决方案来解决这个错误。尽管我的用户已经存在于我的数据库中,但我不想使用admin数据库。其他人遇到同样的问题或找到解决办法?

0

我的问题是我没有在我的settings.py中指定SITE_ID。我这样做:

./manage.py shell 
>>>from django.contrib.sites.models import Site 
>>>Site().save() 
>>>Site.objects.all()[0].id 
u'5391dbc22ebd1212246d50c4' 

如果你不“django.contrib.sites”,那么我不知道为什么会是一个问题。除非您已经使用该模块并且已经将收集/表安装到数据库中。无论哪种情况,这都是我让MongoDB重新开始正常工作的方式。