當我嘗試做request.user.is_authenticated()
我得到一個ValidationError: None is not a valid ObjectId
使用request.user.is_authenticated()在Django項目
我試圖追查問題,但我不使用什麼MongoEngine是造成it.I'm (和MongoDB)
我有我的settings.py如下:
AUTHENTICATION_BACKENDS = (
'mongoengine.django.auth.MongoEngineBackend',
'rs.claimutil.auth_backend.ClaimAuthBackend',
)
SESSION_ENGINE = 'mongoengine.django.sessions'
這是我得到什麼:
回溯:文件 「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py」 in get_response 111. response = callback(request * callback_args,** callback_kwargs)儲備 11文件 「/Users/bastiano/Documents/ttsf/rsrv/views.py」 如果不是request.user.is_authenticated():文件「/Library/Frameworks/Python.framework /Versions/2.7/lib/python2.7/site-packages/django/utils/functional.py 「 在內 184 self._setup()文件」 /Library/Frameworks/Python.framework/Versions/2.7/lib /python2.7/site-packages/django/utils/functional.py「 in _setup 248. self._wrapped = self._setupfunc()File」/Library/Frameworks/Python.framework/Versions/2.7/lib/python2 0.7 /站點包/賈NGO /了contrib/AUTH/middleware.py 「在 16. request.user = SimpleLazyObject(拉姆達:GET_USER(請求)) 文件 」 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/站點包/ django的/了contrib/AUTH/middleware.py 「 在GET_USER 8. request._cached_user = auth.get_user(請求)文件」 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 /站點包/ django的/了contrib/AUTH/初始化 py 「爲 在GET_USER 101用戶= backend.get_user(USER_ID)或AnonymousUser()文件 」 /Library/Frameworks/Python.framework/Versions/2.7 /lib/python2.7/site-packages/mongoengine/django/auth.py」 在GET_USER 149回User.objec ts.with_id(USER_ID)文件 「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py」 在with_id 923返回self.filter(PK =的object_id)。首先()文件 「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py」 在第一 843.結果=自[0]文件「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py」 in getitem 1136. return self._document._from_son(self._cursor [key ])文件 「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py」 in _cursor 579. self._cur sor_obj = self._collection.find(self._query,文件 「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py」 in _query 375。 self._mongo_query = self._query_obj.to_query(self._document)文件 「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py」 in_query 202. query = query.accept(QueryCompilerVisitor(document))File 「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py」 in accept 267 。return visitor.visit_query(self)File「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset。py「 in visit_query 159. return QuerySet._transform_query(self.document,** query.query)File」/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/ 「在_transform_query 720值= field.prepare_query_value(OP,值)文件 」 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/base queryset.py。 py「 in prepare_query_value 455. return self.to_mongo(value)File」/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/base.py「 in to_mongo 451. self.error(unicode(e))文件「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/base.py」 在錯誤 203加註ValidationError(消息,錯誤=錯誤,FIELD_NAME = FIELD_NAME)
異常類型:ValidationError在/ RS /權利要求異常值:無是 不是一個有效的ObjectId
任何想法爲什麼發生這種情況? Django + MongoDB中有更簡單的方法來進行用戶認證嗎?
Views.py:
def claim(request):
if request.method == 'GET':
if not request.user.is_authenticated():
return shortcuts.redirect('rs/login')
all_b = dbutil.get_b(all=True)
return shortcuts.render_to_response('rs/index.html',
{'all_b':all_b},
context_instance=template.RequestContext(request))
elif request.method == 'POST':
視圖的其餘部分爲了簡化省略。我用ipdb來調試它,並且if not request.user.is_authenticated()
是問題。我之前嘗試過使用django.contrib.auth.decorators.login_required.decorator
,但它也失敗了。
請發表您的views.py。 –
問題是Django使用'mongoengine.django.auth.MongoEngineBackend'而不是我創建的認證後端。儘管我在settings.py中指定了它,但我在其中一個視圖中有以下行:'r_v.obj.backend ='mongoengine.django.auth.MongoEngineBackend',這當然會強制Django使用該認證後端。 @Ross和@okm,謝謝! – Bastiano9