在编写一些视图以响应Ajax请求时,我发现login_required装饰器对于未通过身份验证的用户始终html" target="_blank">返回302状态代码有些奇怪。由于这些视图是ajax视图,因此这似乎有些不合适。我不希望用户在这种情况下登录,但是我希望Django告诉客户端访问此视图需要身份验证(我认为401应该是正确的状态代码)。
为了实现这一目标,我开始编写自己的装饰器login_required_ajax,但这在某种程度上超出了我的技能范围。到目前为止,这是我想出的:
def login_required_ajax(function=None,redirect_field_name=None):
"""
Just make sure the user is authenticated to access a certain ajax view
Otherwise return a HttpResponse 401 - authentication required
instead of the 302 redirect of the original Django decorator
"""
def _decorator(view_func):
def _wrapped_view(request, *args, **kwargs):
if request.user.is_authenticated():
return view_func(request, *args, **kwargs)
else:
return HttpResponse(status=401)
if function is None:
return _decorator
else:
return _decorator(function)
在视图上使用此装饰器时,一旦尝试访问网站上的任何页面,我都会收到ViewDoesNotExist异常。
我首先想到的问题可能是用户未通过身份验证时HttpResponse的直接返回,因为响应对象不是可调用的。但是只要我不尝试访问有问题的视图,装饰器就应该起作用,不是吗?如果这确实是症结所在,我该如何编写一个装饰器来返回状态代码为401的HttpResponse?
这是一个很好的尝试。这是我发现的几个问题:
_decorator
函数应该返回_wrapped_view
。if function is None
块的缩进有点小-该login_required_ajax
函数需要返回修饰后的函数。这是进行了这些更改的装饰器:
def login_required_ajax(function=None,redirect_field_name=None):
"""
Just make sure the user is authenticated to access a certain ajax view
Otherwise return a HttpResponse 401 - authentication required
instead of the 302 redirect of the original Django decorator
"""
def _decorator(view_func):
def _wrapped_view(request, *args, **kwargs):
if request.user.is_authenticated():
return view_func(request, *args, **kwargs)
else:
return HttpResponse(status=401)
return _wrapped_view
if function is None:
return _decorator
else:
return _decorator(function)
Python 拥有一件非常有趣的特性,那就是函数装饰器。这个特性允许您使用一些 非常简介的语法编辑 Web 应用。因为 Flask 中的每个视图都是一个函数装饰器, 这些装饰器被用来将附加的功能注入到一个或者多个函数中。 route() 装饰器您可能已经使用过了。但是在一些情况下您需要实现自己的装饰器。例如, 您有一个仅供登陆后的用户访问的视图,如果未登录的用户试图访问,则把用户 转接到登陆界面。
我已经实现了JWT认证和授权。一切都很好,除了未经授权的场景 未经授权的情况:在不提供授权令牌的情况下对路由进行http调用。 结果:禁止403例,未批准403例 以下是我的完整课程: 备注: 我在UsernamePasswordAuthenticationFilter中遇到了同样的问题,我通过重写默认的AuthenticationFailureHandler解决了这个问题:
我有一个简单的docker化Spring靴应用程序。当我在本地运行应用程序(没有docker)一切运行正常。控件返回jsp视图。 但当我使用容器运行应用程序时,它会返回一个包含html代码的文件。我可以尝试强制控制器返回html响应而不是八位字节流,但这不是一个聪明的解决方案。 我意识到问题在jasper、tomcat和docker通信之间,但我找不到它,于是我尝试了一系列解决方案。 任何帮助都很
问题内容: django中是否有一个类似于@login_required的装饰器,它也可以测试用户是否是超级用户? 谢谢 问题答案: 使用装饰器:
我试图通过spring boot学习Spring Security的基础知识,我创建了一个项目,其中还包括postgresql设置。Postgresql部分按预期工作。 问题是,在我通过正确的凭据访问安全endpoint后,我只是试图使用正确的用户名和错误的密码进行访问,并期待401错误,但返回200。并返回endpoint的内容。 如果我使用和进行基本身份验证请求,则响应为401 UnAutho
我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我