首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在同一项目中的Django和django-rest-framework之间共享经过身份验证的用户

在同一项目中的Django和django-rest-framework之间共享经过身份验证的用户
EN

Stack Overflow用户
提问于 2019-03-05 03:52:27
回答 1查看 665关注 0票数 0

我有一个Django项目,最终将由三个应用程序组成。其中两个是“普通的”Django应用程序,第三个是djangorestframework应用程序。我还计划在某个时候为该项目创建一个桌面客户端。

我希望rest应用程序是唯一与数据库通信的实体。因此,我使用requests从“普通”Django应用程序的视图与rest端点进行通信,我将对桌面客户端执行相同的操作。

我希望所有应用程序只对经过身份验证的用户开放,所以我使用的是Django的身份验证后端。

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

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

我曾尝试从提供给视图的request对象中提取会话cookie,并通过requests.get传递它,但未能以正确的方式将其放入requests.get调用。

到目前为止,使用请求和已建立的会话看起来是我最好的选择,特别是因为这也将是桌面客户端做事情的方式。因此,我目前正在寻找为requests.get提供会话cookie的正确方法,但我当然对更好的解决方案持开放态度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 04:35:29

您应该使用令牌。

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

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

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

DRF: Third party packages

我在很多项目中使用过knox,它非常好用。

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

大多数应用程序在标头中使用令牌,您可以简单地将其添加到所有requests调用中:

Requests docs: Custom Headers

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54990569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档