当前位置: 首页 > 知识库问答 >
问题:

使用请求。使用者是否在Django项目中验证了_()

庞书
2023-03-14

当我尝试执行请求时。使用者is_authenticated()我得到一个验证错误:None不是有效的ObjectId

我正试图找出问题所在,但我不知道是什么原因造成的。我正在使用MongoEngine(和MongoDB)

我的设置中有以下内容。py:

AUTHENTICATION_BACKENDS = (
    'mongoengine.django.auth.MongoEngineBackend',
    'rs.claimutil.auth_backend.ClaimAuthBackend',
)


SESSION_ENGINE = 'mongoengine.django.sessions'

这就是我得到的:

回溯:get_response 111中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/core/handlers/base.py”。response=回调(请求,*回调参数,**回调参数)文件“/Users/bastiano/Documents/ttsf/rsrv/views.py”,保留区11。如果没有要求。使用者是内部184中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/utils/functional.py”。自我_setup()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/utils/functional.py”,位于_setup248中。自我_包裹=自我_setupfunc()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/auth/middleware.py”在16中。要求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中。请求_cached_user=auth。在get_user 101中获取用户(请求)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/contrib/auth/init.py”。用户=后端。在get_user 149中获取_user(user_id)或匿名用户()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/django/auth.py”。返回用户。物体。带有_id923的_id(用户_id)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/queryset.py”。回归自我。过滤器(pk=对象\u id)。first()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/queryset.py”位于first 843中。result=self[0]文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/queryset.py”,位于getitem 1136中。回归自我_文件_来自光标579中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/queryset.py”。自我_光标_obj=自身_收集在to query 202.query=query 202.query=query=query.accept中找到(self.\u query,File)/Library/Frameworks/python2.7/lib/python2.7/site packages/mongoengine/queryset.py(QueryCompilerVisitor(document))文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/queryset.py”在accept 267.return visitor.visit_query(self)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/queryset.py/queryset.py”中在"转换"查询720.value=field.prepare"文件中访问"查询159.return QuerySet."转换"查询(self.document,**query.query)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/QuerySet.py”“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/base.py”在prepare_query_value 455中。返回self.to_mongo(value)文件“/Library/Frameworks/python2.7/site packages/mongoengine/base.py”在_mongo 451.self.error(unicode(e))文件中”/错误203中的Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/mongoengine/base.py“引发验证错误(消息,错误=错误,字段名称=字段名称)

异常类型:ValidationError at/rs/claim异常值:None不是有效的ObjectId

知道为什么会这样吗?在Django MongoDB中是否有更简单的方法来进行用户身份验证?

意见。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对其进行调试,如果不是请求,则使用。使用者是否已通过身份验证()是问题所在。我试着使用django。contrib。auth。装饰师。需要登录。decorator,但它也失败了。

共有3个答案

巫欣荣
2023-03-14

在我的一个观点中,我有以下观点:r\u v.obj。后端='mongoengine。德扬戈。auth。MongoEngineBackend“,这就是Django在设置中忽略身份验证\u后端的原因。py,并且从未使用我的自定义身份验证后端。

鱼宜
2023-03-14

您使用的是什么版本的MongoEngine/Django?

您是否启用了django。contrib。auth。中间件。身份验证中间件?这应该为请求设置一个用户实例或匿名用户

什么是rs.claimutil。验证后端。您的后端是什么样子的?它的get\u user方法返回什么?如果您只有一个身份验证后端,它会停止出错吗?

莫泓
2023-03-14

尝试更新您的mongoEngine到最新版本。在主人,它是

def get_user(userid):
    """Returns a User object from an id (User.id). Django's equivalent takes
    request, but taking an id instead leaves it up to the developer to store
    the id in any way they want (session, signed cookie, etc.)
    """
    # your installed mongoengine might not include following two lines
    if not userid:
        return AnonymousUser()
    return MongoEngineBackend().get_user(userid) or AnonymousUser()

根据trackback,一个useridw/值None会导致问题。

 类似资料:
  • 我需要在爪哇中使用摇摆不定(YAML文件)来验证传入的REST请求。所以任何人都可以帮我这个。提前致谢。

  • 我有一个这样的处理程序和一个自定义注释@validrequest: 注释本身看起来是这样的: 而验证器是这样的: 问题是验证被完全忽略了。我可以发送任何事件有或没有身体和一切工作无一例外。我做的一切都是根据Micronout文档,会有什么问题吗? https://docs.micronaut.io/latest/guide/index.html#BeanValidation

  • 直接集成 GoJavaNode.jsPython 名称 描述 模型 策略 VMware Harbor VMware的开源可信云本地注册表项目,用于存储、签名和扫描内容。 Code Beego ORM Intel RMD 英特尔的资源管理守护进程。 .conf .csv VMware Dispatch 用于部署和管理无服务器风格应用程序的框架。 Code Code Skydive 一个开源的实时网络

  • 我正在使用GRPC Java,希望使用拦截器验证请求。 许多这样的链接告诉我们使用onMessage()访问请求的方法,但我想知道他们在做什么来验证请求。 此外,onMessage()中的消息参数是通用的,我不能直接访问请求字段参数,但必须使用一些if-else/switch case键入消息,然后分别对每个字段应用检查,这是我现在的最后一个选项。 例如,下面是一个示例原型文件: 另外,我简单地打

  • 问题内容: 我正在尝试设置一些环境变量(用于对dev / prod端点进行API调用,取决于dev / prod等的键等),我想知道使用dotenv是否行得通。 我已经安装了dotenv,并且正在使用webpack。 我的webpack条目是,因此在该文件中 然后,在我的webpack配置中,输入以下内容: 但是,它仍未定义。如何正确执行此操作? 问题答案: 最简洁的答案是不。浏览器无法访问本地或

  • 问题内容: 我正在关注Django 1.3 Web开发。对于登录,我收到以下错误 这是我的settings.py随附的APPS。这正是书上所说的样子。 这本书说,它应该包含django.contrib.auth.views.login ..并且我将其包含在 和我的registration / login.html …复制自本书的副本。它应该做。 问题答案: 你需要将模板标记添加为Django模板中