Python 在同一项目中的Django和Django rest框架之间共享经过身份验证的用户

Python 在同一项目中的Django和Django rest框架之间共享经过身份验证的用户,python,django,django-rest-framework,python-requests,Python,Django,Django Rest Framework,Python Requests,我有一个Django项目,它最终将由三个应用程序组成。其中两个是普通的Django应用程序,第三个是Djangorest框架应用程序。我还计划在某个时候为项目创建一个桌面客户端。 我希望rest应用程序是与数据库通信的唯一实体。因此,我使用普通Django应用程序视图中的请求与rest端点通信,我将对桌面客户端执行同样的操作。我希望所有的应用程序都只能由经过身份验证的用户访问,所以我使用Django的身份验证后端 我的问题是,在视图中使用请求时,如何将经过身份验证的用户/会话从纯Django应用

我有一个Django项目,它最终将由三个应用程序组成。其中两个是普通的Django应用程序,第三个是Djangorest框架应用程序。我还计划在某个时候为项目创建一个桌面客户端。 我希望rest应用程序是与数据库通信的唯一实体。因此,我使用普通Django应用程序视图中的请求与rest端点通信,我将对桌面客户端执行同样的操作。我希望所有的应用程序都只能由经过身份验证的用户访问,所以我使用Django的身份验证后端

我的问题是,在视图中使用请求时,如何将经过身份验证的用户/会话从纯Django应用程序传递到rest端点

我使用请求的HTTPBasicAuth在restapi上进行了身份验证,但这需要我手头有用户的纯文本密码。当然,我可以创建一个技术用户来完成这些请求。但这也意味着每个请求都需要首先通过身份验证,这并不是最好的方法

我试图从提供给视图的请求对象中提取会话cookie,并通过requests.get传递它,但没有以正确的方式将其放入requests.get调用中

到目前为止,使用请求和已建立的会话看起来是我的最佳选择,特别是因为这也是桌面客户端处理事情的方式。因此,我目前正在寻找提供请求的正确方法。使用会话cookie获取,但我当然愿意找到更好的解决方案。

您应该使用令牌

基本上,django项目之外的任何类型的身份验证都应该使用安全令牌进行管理

是的,每次发送请求时都应该进行身份验证检查。为了加快速度,您可以将令牌存储在内存中。您可以使用redis,甚至可以在内存中加载数据库,或者。。。但这是正确和常见的方法。即使django每次使用其内置函数时都会进行此检查

DRF docs推荐了一些包来管理这些令牌:

我用过很多项目,它很不错

基本上,要在所有项目或微服务上对用户进行身份验证,您必须从用户处获取令牌,将其设置为标头或。。。用于您对主数据库或身份验证项目的请求

大多数应用程序在标题中使用令牌,您只需将其添加到所有请求呼叫中即可:


谢谢你的回复。我读过关于tokenauth的文章,但使用它并不舒服,因为我还没有充分了解它的工作原理。我一定要试一试。是的,每个请求都需要进行身份验证检查。我的意思是,使用BasicAuth,用户将针对每个请求进行重新身份验证,而使用会话或令牌则可以归结为检查所提供的会话或令牌是否有效。嗯,可能感觉不舒服,但这是每个人都在使用的。你可以查看一些大公司和其他开源项目的API,以获得更好的想法,但这是最好的方法,如果不是唯一正确的方法的话。是的,似乎正在做我需要的事情。再次感谢。