首页 > 解决方案 > 如何使 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);
            }
        });
    });

标签: jquerydjangoajaxapidjango-rest-framework

解决方案


作为非常基本的设置,您可以在从服务器获取令牌时将其保存在本地存储中

success: function (res) {
      console.log(res.token)
      localStorage.setItem('authToken', res.token)
}

并随时从那里获取localStorage.getItem('authToken')。即使在重新启动浏览器/系统时,它也会在页面刷新之间持续存在。

要为 ajax 自动设置,请在页面加载时执行此代码

       $.ajaxSetup({
            headers: {
                "Authorization": 'Token ' + localStorage.getItem('authToken')
            }
        });

推荐阅读