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重新開始正常工作的方式。