django-mongodb-engine和Django的原生auth系统

时间:2014-02-12 16:27:15

标签: python django mongodb django-authentication django-mongodb-engine

如标题中所述,我正在使用django-mongodb-engine,我正在尝试配置本机Django身份验证框架。我在线阅读了一些评论,它应该开箱即用,没有一些功能。但是,我找不到任何教程,而且,我在尝试自己设置时遇到错误。我遇到的问题肯定与数据库权限有关。我已根据Django docs添加了Django中间件和应用程序。但是,当我发出syncdb命令时,它会失败并显示错误。

$ 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
}

Mongo用户权限

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

我不确定我可以授予此人的其他权限,以及/或我需要创建此用户的其他位置。

有什么想法吗?

3 个答案:

答案 0 :(得分: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: someUser@user.com
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)
$

答案 1 :(得分: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重新开始正常工作的方式。

答案 2 :(得分:-1)

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

相关问题