如何在Django Rest框架令牌身份验证中使用javascript获取令牌

如何在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?}, })

我遵循了这里的文档,已经为每个用户创建了令牌。但是我不知道如何在javascript中获取令牌?例如,我不想用类似ajax的方式发表评论

$.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和移动身份验证流。