jquery - 如何使 DRF ( Django-REST-Framework) 令牌保持不变,使其在每次页面刷新后不会丢失?
问题描述
注意——我没有在前端使用 Python、Django、模板。只是纯 HTML+jQuery+AJAX
我已经成功地实现了从 API 后端获取基于用户的令牌,在头文件中为后续请求设置它并处理 API 提供的数据。但问题是,每当我刷新页面时,Authentication
标头中都不存在令牌,我必须再次提供凭据才能访问 API。每次我刷新页面时,都会删除令牌。我怎样才能阻止这个?
这是我使用 jQuery+AJAX 设置 Header 的代码。
$('#login').click(function () {
//Send a POST Request to the URL for Token specified for User
$.ajax({
type: 'POST',
data: {
username: $('#username').val(),
password: $('#password').val()
},
url: 'http://127.0.0.1:8000/rest-api/api-token-auth/',
success: function (res) {
console.log(res.token)
//Initialize the Ajax for the first time
$.ajaxSetup({
//Set the headers so that these will be in every HTTP Request
headers: {
"Authorization": 'Token ' + res.token
}
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Error: " + errorThrown);
}
});
});
解决方案
作为非常基本的设置,您可以在从服务器获取令牌时将其保存在本地存储中
success: function (res) {
console.log(res.token)
localStorage.setItem('authToken', res.token)
}
并随时从那里获取localStorage.getItem('authToken')
。即使在重新启动浏览器/系统时,它也会在页面刷新之间持续存在。
要为 ajax 自动设置,请在页面加载时执行此代码
$.ajaxSetup({
headers: {
"Authorization": 'Token ' + localStorage.getItem('authToken')
}
});
推荐阅读
- php - 将数组值推送到 Ajax [JQuery / PHP / HTML]
- regex - 使用正则表达式匹配仅包含字母数字和特殊字符混合的输入(没有任何空格)
- java - 如何在 JAVA 中检查地图中存在的值
- azure - IoT 中心 - 最大上传文件大小
- docker - 使用 cAdvisor 监控 FARGATE 和 EC2 容器
- android - ANDROID 4 KITKAT 代码推送成功但应用没有更新
- youtube-api - youtube Data API 是否需要 HTTPS?
- css - 如何从Angular中的一个控制所有组件中的日期格式?
- c++ - 在 Windows 10 中将 CLOCKS_PER_SEC 重新定义为更高的数字
- google-photos-api - 使用 BASE_URL=d 访问时,Google Photos API 返回损坏的图像