Django-Rest-Knox 提供了一个视图来为您提供令牌进行身份验证,但该视图需要身份验证:
这打算如何使用?
按照有关设置的文档,我的设置如下所示:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': ('knox.auth.TokenAuthentication',),
}
我尝试以这种方式进行身份验证:
fetch("http://localhost:8000/api-v1/auth/login/", {
method: "POST",
body: JSON.stringify({email: email, password: password}),
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
}
}).then(result => result.json())
.then(result => {
console.log(result);
});
但IsAuthenticated
正在阻止我并显示此消息:
Unauthorized: /api-v1/auth/login/
在 Django 端,在 JavaScript 端:
{"detail":"Authentication credentials were not provided."}
电子邮件和密码与我在管理工具上成功登录时使用的相同。
只是为了澄清,我没有一个系统可以让某人登录到 Web 应用程序并将令牌复制并粘贴到其他应用程序。在我正在构建的系统中,您使用您的用户名和密码直接通过 API 登录,然后获取令牌并保存以供后续请求使用。
与 LastPass 的工作方式非常相似,当您第一次打开它时,它会要求您输入电子邮件和密码(不要离开并从网站获取令牌):
Knox 的 LoginView 的全部目标是在 API 请求中生成并提供该令牌:https ://github.com/James1345/django-rest-knox/blob/05f218f1922999d1be76753076cf8af78f134e02/knox/views.py#L30-L55
这也是几乎每个移动应用程序和 SPA 的工作方式,它们要求您提供用户/电子邮件和密码以获取令牌,然后保存令牌以供进一步请求。