如何在Django Rest框架令牌身份验证中使用javascript获取令牌
我遵循了这里的文档,已经为每个用户创建了令牌。但是我不知道如何在javascript中获取令牌?例如,我不想用类似ajax的方式发表评论如何在Django Rest框架令牌身份验证中使用javascript获取令牌,django,django-rest-framework,Django,Django Rest Framework,我遵循了这里的文档,已经为每个用户创建了令牌。但是我不知道如何在javascript中获取令牌?例如,我不想用类似ajax的方式发表评论 $.ajax({ url: "/api/comment/", type: "POST", datatype: "json", data: {"reply_id": "1", csrfmiddlewaretoken: "{{ csrf_token }}", and token here?}, })
$.ajax({
url: "/api/comment/",
type: "POST",
datatype: "json",
data: {"reply_id": "1", csrfmiddlewaretoken: "{{ csrf_token }}", and token here?},
});
但如何获取当前用户的令牌?cookies已设置为仅http,我无法访问它。也许我应该发送另一个ajax来获取令牌,首先使用用户名(显示在我的网站上)搜索数据库
欢迎任何帮助,谢谢
编辑:我应该改用localStorage吗?您首先需要使用用户凭据登录以检索身份验证令牌。然后您就有了一个auth令牌,可以将其存储在本地存储中 用于登录的JS代码大致如下所示
var credentials = {
username: "admin",
password: "abc123"
};
$.post("http://localhost:8000/api-token-auth/", credentials, function(auth) {
console.log("Logged in, auth token: ", auth.token);
}
在本地存储中存储是更好的方法吗?我在这里读过一篇文章,我以localStorage为例,因为我认为问题在于获取实际的令牌,而不是存储它。Stormpath确实更喜欢存储Json Web令牌(JWT)安全cookes而不是本地存储,尽管JWT本质上是非常安全的(这就是为什么JWT.io不喜欢存储方法)。但是,您使用的是普通身份验证令牌,如果您希望使用JWT,则需要使用该应用程序。如果您希望继续使用普通的AuthToCon,可以考虑将它们定时(重新生成它们)以提高安全性。如果是这样,那么你根本不需要传递令牌。@mariodev,我不确定在web中使用SessionAuthentication和在移动应用程序中使用令牌身份验证是否好?这是一种标准做法
SessionAuthentication
最适合于将TokenAuthentication
用于移动设备的web应用程序。如果在DRF的设置中同时设置这两个选项,它将同时处理web和移动身份验证流。