내가 얻을 장고 프로젝트에() request.user.is_authenticated 사용하여 ValidationError: None is not a valid ObjectId
은 내가 <code>request.user.is_authenticated()</code>을 할 때
내가 문제를 추적하기 위해 노력하고있어하지만 난 MongoEngine를 사용하여 해난 어떤 원인을하지 않습니다 (그리고 MongoDB를.)
내가 가지고있는 내 settings.py에서 다음
AUTHENTICATION_BACKENDS = (
'mongoengine.django.auth.MongoEngineBackend',
'rs.claimutil.auth_backend.ClaimAuthBackend',
)
SESSION_ENGINE = 'mongoengine.django.sessions'
이 내가 무엇을 얻을 :
추적 기능 : 파일 "/ 라이브러리 /Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 111. 응답 = 콜백 , * callback_args, ** callback_kwargs) 파일 "/Users/bastiano/Documents/ttsf/rsrv/views.py"가 예약어 11. 그렇지 않은 경우 request.user.is_authenticated() : 파일 "/Library/Frameworks/Python.framework /Versions/2.7/lib/python2.7/site-packages/django/utils/functional.py " in 내부 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() 파일"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2 .7/site-packages/dja ngo/contrib/auth/middleware.py " in 16. request.user = SimpleLazyObject (lambda : get_user (request)) 파일 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ site-packages/django/contrib/auth/middleware.py "get_user 의 8. request._cached_user = auth.get_user (요청) 파일"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/사이트 패키지/장고 /있는 contrib/인증/초기화 평 /Library/Frameworks/Python.framework/Versions/2.7 "나 get_user (101) 사용자 = backend.get_user (USER_ID) 또는 AnonymousUser에서 () 파일" /lib/python2.7/site-packages/mongoengine/django/auth.py "get_user의 149. return User.objec ts.with_id (user_id) 파일 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py"with_id가 인 인 경우 return self.filter (pk = object_id) .first() 파일 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py" 처음에 843. result = self [0] File "/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, File "/ 라이브러리 /Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py"_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"to_query에 202. query = query.accept (QueryCompilerVisitor (document)) 파일 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py" 수신 허용 267 return visitor.visit_query (self) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/queryset.py "visit_query 159. return QuerySet._transform_query (self.document, ** query.query) 파일"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/ queryset.py " in _transform_query 720. value = field.prepare_query_value (op, value) 파일 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/base. 평 to_mongo 에 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/base.py " 을"prepare_query_value (455) 반환 self.to_mongo (값)에서 파일 " 451. self.error (unicode (e)) 파일 "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mongoengine/base.py"없음 유효한 ObjectId가
어떤 아이디어 을하지 않습니다 : 오류 (203) 인상 ValidationError (메시지, 오류 = 오류, FIELD_NAME = FIELD_NAME)
예외 유형에:/RS/청구 예외 값에 ValidationError 왜 이런 일이 일어 났습니까? 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
을 사용해 보았지만 실패했습니다.
귀하의 웹 사이트를 게시하십시오. –
문제는 장고가 내가 만든 인증 백엔드가 아니라'mongoengine.django.auth.MongoEngineBackend '를 사용하고 있다는 것이 었습니다. 비록 내가 settings.py에서 지정 했음에도 불구하고, 저는 제 견해 중 하나에'r_v.obj.backend = 'mongoengine.django.auth.MongoEngineBackend ''라는 줄을 썼습니다. 물론 이것은 Django가 그 인증을 사용하도록 강제합니다 백엔드. @ 로스와 @okm, 감사합니다! – Bastiano9