Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django mongodb引擎和django的本机身份验证系统_Python_Django_Mongodb_Django Authentication_Django Mongodb Engine - Fatal编程技术网

Python django mongodb引擎和django的本机身份验证系统

Python django mongodb引擎和django的本机身份验证系统,python,django,mongodb,django-authentication,django-mongodb-engine,Python,Django,Mongodb,Django Authentication,Django Mongodb Engine,正如标题中所述,我正在使用django mongodb引擎,并试图配置本机django身份验证框架。我在网上读到一些评论,认为它应该是开箱即用的,没有一些功能。然而,我找不到任何教程,而且,我在尝试自己设置时出错。我遇到的问题肯定与数据库权限有关。我已经包括了Django中间件和应用程序。但是,当我发出syncdb命令时,它会失败并出现错误 $ python manage.py syncdb OperationFailure: database error: not authorized for

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

$ python manage.py syncdb
OperationFailure: database error: not authorized for query on MyDB.system.namespaces
设置.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" ] }
我不确定我可以授予这个家伙什么其他权限,和/或我需要在哪里创建这个用户


有什么想法吗?

玩过之后,这里是解决方案。您必须使用本机mongo管理数据库。因此,所需的更改:

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django_mongodb_engine',
        'NAME': 'admin',
        'USER': 'mySuperUser',
        'PASSWORD': 'mypass',
        'HOST': 'XXX.XXX.XXX.XXX',
        'PORT': '',
    },
    # some other DBs
}
用户mySuperUser必须自然存在于管理数据库中。为了确保身份验证操作(如添加和删除用户)的安全,我在mongo中为其授予了userAdminAnyDatabase权限。权限可能过多,但我必须使用它来确定所需权限的适当范围。以下是权限:

// mongo
admin> db.system.users.find()
{ "_id" : ObjectId("..."), "pwd" : "...", "roles" : [         "readWriteAnyDatabase",         "dbAdminAnyDatabase",   "clusterAdmin",         "userAdminAnyDatabase" ], "user" : "mySuperUser" }
接下来,我们最终可以运行syncdb命令:


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

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

./manage.py shell
>>>from django.contrib.sites.models import Site
>>>Site().save()
>>>Site.objects.all()[0].id
u'5391dbc22ebd1212246d50c4'
如果您不是“django.contrib.sites”,那么我不确定这会是一个问题。除非您一直在使用该模块并且已经将集合/表安装到数据库中。在这两种情况下,我都是这样让MongoDB重新开始正常工作的

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