问题标签 [django-rest-knox]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4951 浏览

django - 使用 django-rest-knox 时如何登录?

Django-Rest-Knox 提供了一个视图来为您提供令牌进行身份验证,但该视图需要身份验证:

https://github.com/James1345/django-rest-knox/blob/05f218f1922999d1be76753076cf8af78f134e02/knox/views.py#L16

这打算如何使用?

按照有关设置的文档,我的设置如下所示:

我尝试以这种方式进行身份验证:

IsAuthenticated正在阻止我并显示此消息:

在 Django 端,在 JavaScript 端:

电子邮件和密码与我在管理工具上成功登录时使用的相同。

只是为了澄清,我没有一个系统可以让某人登录到 Web 应用程序并将令牌复制并粘贴到其他应用程序。在我正在构建的系统中,您使用您的用户名和密码直接通过 API 登录,然后获取令牌并保存以供后续请求使用。

与 LastPass 的工作方式非常相似,当您第一次打开它时,它会要求您输入电子邮件和密码(不要离开并从网站获取令牌):

在此处输入图像描述

Knox 的 LoginView 的全部目标是在 API 请求中生成并提供该令牌:https ://github.com/James1345/django-rest-knox/blob/05f218f1922999d1be76753076cf8af78f134e02/knox/views.py#L30-L55

这也是几乎每个移动应用程序和 SPA 的工作方式,它们要求您提供用户/电子邮件和密码以获取令牌,然后保存令牌以供进一步请求。

0 投票
2 回答
1538 浏览

django - 无法使用令牌身份验证作为 django-rest-knox 中具有自定义用户模型的唯一身份验证类

我正在使用django-rest-knox用户身份验证并knox.auth.TokenAuthentication作为唯一的身份验证类。另外,我通过扩展使用自定义用户模型AbstractBaseUser。我有电子邮件和密码作为登录字段。

根据文档,当您使用令牌身份验证作为唯一的身份验证方法时,您必须覆盖 knox 的内置 LoginView。我遵循了相同的方法,但似乎没有成功。

视图.py

序列化程序.py

网址.py

当我转到 url/api/login时,我没有收到电子邮件和密码字段来输入我的凭据并获得以下输出:-

0 投票
2 回答
527 浏览

authentication - 如何在 django 通道上使用 Knox 令牌身份验证来验证 websocket 连接?

我知道您可以编写自定义身份验证中间件以在 django 通道 2 中使用。这适用于 Django 的内置令牌身份验证,但使用 django-rest-knox 令牌是另一回事。Knox 以加密形式存储其令牌,因此它不像简单地通过查找令牌从数据库中检索用户那样简单。请帮忙。

0 投票
1 回答
143 浏览

django - 将 knox 添加到 urls.py 后出现语法错误

我是 Django 和 django-rest-framework 的新手。我正在构建一个 API,我想使用 Django-rest-Knox 实现身份验证。我已将 Knox 添加到 settings.py 中已安装的应用程序中。在项目的 urls.py 中,我添加了 Knox 的路径。似乎有语法错误。

这是错误消息:

path("api/auth/", include('knox.urls')), ^ SyntaxError: invalid syntax

0 投票
2 回答
1858 浏览

django - 当 Knox 创建的令牌过期时如何强制注销?

我按照 Brad Traversy 的本教程 ( https://www.youtube.com/watch?v=0d7cIfiydAc ) 使用 Knox 进行身份验证,使用 React/Redux 作为前端,开发了我的基于 Django 的带有令牌身份验证的 web 应用程序。登录/注销工作正常(这是布拉德的代码:https ://github.com/bradtraversy/lead_manager_react_django/blob/master/leadmanager/frontend/src/actions/auth.js--> 使用 POST 请求注销),除了一个问题:当用户长时间远离计算机时,令牌同时过期。因此,当用户返回时,他仍然在网站的登录区域,但是一旦他打开一个从数据库加载数据的 React 组件,控制台就会抛出 401 错误(“加载资源失败:服务器响应状态为 401(未授权)”)。然后用户必须继续“注销”并再次登录。

这不是最优的,我希望在用户返回后,系统实现令牌到期并自动将用户注销。我想到了以下方法,但我不确定如何实现它或哪种方法最好:

1)对于每个 API 请求:如果答案是 401 --> 注销(这也可能会在令牌未过期的情况下将用户注销,但如果存在其他权限问题)- 对我来说似乎不是最佳选择。

2)相反,也可以创建一个测试路线,例如 api/auth/check 使用 Django 视图,包括典型检查

如果返回 401 --> 注销。所以这意味着对于每个数据库请求,我之前都有另一个相当不特定的数据库请求。

3) 专门检查每个 API 请求是否令牌已过期 --> 怎么做?在文档(https://james1345.github.io/django-rest-knox/)中,我找不到检查令牌有效性的方法。我在数据库表“knox_authtoken”中看到了到期日期和“digest”列中的巨大代码,但这显然是加密数据,无法与本地存储下浏览器中的令牌值进行比较。

我很高兴收到有关如何最好地实施这一点的建议!

0 投票
0 回答
512 浏览

python - Django 休息框架 | Knox 身份验证密码未在数据库中散列

我创建了用于在 Django 中注册用户的序列化程序djangorestframework。我也django-rest-knox用于令牌身份验证。问题是创建用户时密码没有在数据库中散列。下面是序列化器的代码:

请注意,我在上面的代码中尝试了创建用户的注释和未注释方法。在这两种情况下,密码都在数据库中保存为原始密码。以下是settings.py与实现 knox 令牌认证相关的部分:

有什么建议为什么密码没有被散列?

0 投票
1 回答
666 浏览

python - 即使给定正确的用户名和密码,Django/knox 后端登录也会失败

我正在使用内置用户模型和 knox 令牌身份验证在 Django 中构建用户身份验证。通过邮递员,我可以创建一个新用户,该用户正确返回该用户的用户名和唯一令牌。但是,当我尝试使用正确的用户名和密码信息访问我的登录路径时,它会返回 400 Bad Request 以及我的验证错误消息“凭据不正确”。知道为什么会发生这种情况吗?

下面是我的登录序列化程序、api 和 url 路径。

我会注意到,include('knox.urls')如果发生任何类似的路径名问题并且仍然收到相同的问题,我会尝试将该部分移动到我的 url 路径的底部。

0 投票
1 回答
735 浏览

django - DRF 和 Knox 身份验证:允许编外用户登录

我创建了一个登录 API,它对来自django.contrib.auth.models.User. 我正在使用DRF和实现令牌身份验证django-rest-knox到目前为止一切都很好。

我正在开发的应用程序有点复杂,但我将使用我们的一个子应用程序作为示例。所以我们有一个名为的子应用程序jobnet,这个应用程序的目标是允许人们通过网站注册一个帐户,并能够在线申请我们公司的可用工作

应用程序应有2种不同类型的用户(即员工用户(公司员工)和在线申请者)的单独登录页面。这里的过程是在线申请者将注册一个帐户并标记is_staff=False。每次他登录,他将被重定向到non-staff dashboard他可以申请工作和管理申请的地方。

一旦他被正式录用,他的帐户将更新为is_staff=True。现在,他既可以通过申请人的登录界面登录,也可以通过工作人员的登录页面登录。无论哪种方式,系统都会检测到他已经是员工,并将他重定向到员工的仪表板。

我已经有一个逻辑(记住),可以根据用户的帐户配置通过不同的视图重定向用户。我现在的问题是我不知道如何让编外用户能够使用我正在使用的身份验证工具(Django 的用户模型和 knox 令牌身份验证)首先登录。每次我尝试登录编外用户时,响应都会显示“凭据无效...”

我尝试has_permission(self, request)在我的 LoginAPI 类中定义方法,但无济于事。

这是我的登录 API 源代码:

0 投票
0 回答
30 浏览

reactjs - 我在几分之一秒内看到登录页面,然后被重定向到潜在客户表单

我正在尝试将 react 与 django 集成为此我指的是 Brad 的一门课程,他在其中使用 django 和 react[ https://www.youtube.com/watch?v=kfpY5BsIoFg&list=PLillGF-RfqbbRA-CIUxlxkUpbq0IFkX60&index=7 ] . 我按照课程中的建议使用 HashRouter 并响应路由器来处理路由。问题是每当我要访问http://localhost:8000时,它都会直接访问“ http://localhost:8000/#/ ”,而不是访问“ http://localhost:8000/#/login ”页面。下面是我的 auth 和 LoginJS 代码以及我的私有路由的样子。

authJS

登录 JS

私人路线

APP.JS

0 投票
1 回答
412 浏览

python - Django-rest-framework {"detail": "未提供身份验证凭据。" } 使用 django-rest-knox

我看到了错误{"detail": "Authentication credentials were not provided." }

这是我用于登录的代码

我的模型:

我的序列化器:

我的观点:

我的网址:

此外,当我提供注册时生成的令牌时,它会使用户处于非活动状态或死亡状态。但是当我检查我的数据库和令牌到期时间时,它仍然处于活动状态。我尝试了不同的第三方库,例如 rest-auth,它也给出了相同的错误。我也检查了有关同一主题的许多其他答案,但应用它们也无济于事。