from rest_framework.authentication import BasicAuthentication
def my_view(request):
# use django-rest-framework's basic authentication to get user
user = None
user_auth_tuple = BasicAuthentication().authenticate(request)
if user_auth_tuple is not None:
user, _ = user_auth_tuple
5条答案
按热度按时间gkl3eglg1#
当您执行基本的auth请求时,实际上是将凭证添加到
Authorization
头中。在传输之前,这些凭证是base64编码的,因此您需要在接收时对其进行解码。下面的代码片段假定只有一个有效的用户名和密码:
如果您希望与
User
型号的用户名和密码进行比较,请尝试以下操作:请注意,后一个版本并不是非常安全。乍一看,我可以看到它容易受到timing attacks的攻击,例如。
bfrts1fy2#
您可以尝试自定义装饰器(似乎是推荐的方式here和here),而不是添加新的中间件:
my_app/decorators.py
:然后用这个来装饰你的视图:
cyvaqqii3#
此库可以用于:https://github.com/hirokiky/django-basicauth
Django的基本认证工具。
文档显示如何使用它:
将装饰器应用于CBV
要将@basic_auth_requried装饰器应用到基于类的视图,请使用django.utils.decorators.method_decorator。
来源:https://github.com/hirokiky/django-basicauth#applying-decorator-to-cbvs
shyt4zoc4#
对于那些已经使用django-rest-framework(DRF)的用户:
DRF有一个
BasicAuthentication
类,它或多或少地完成了其他答案中描述的工作(参见源代码)。这个类也可以在“普通”Django视图中使用。
例如:
ev7lccsx5#
扩展djvg的答案,并采用John Moutafis的 Package 器与django-rest-framework / DRF一起使用-这允许您使用静态用户/通行证 Package 单个端点(例如,如果您想快速拥有一个静态用户/密码的文档端点,而无需在django应用程序中设置常规用户):
然后你可以将其用作装饰器,但由于你通常将
.as_view()
与DRF的端点一起使用,所以你也可以手动 Package 它(如果你不能控制视图代码本身,例如因为它在drf-spectacular中,这很有用):然后,您可以通过在设置中定义
DOCS_AUTHENTICATION
来配置身份验证详细信息。