django - 将 JWT 访问密钥存储在 Cookie 中,但仍无法访问 API
问题描述
在我的 nextjs react 应用程序中,我有这个用于我的登录页面来存储我的 cookie:
axios
.post(apiUrl, data)
.then(response => {
console.log(response.data);
const token = response.data.access;
Cookies.set('jwtCookie', token, { expires: 1 });
Router.push('/');
setShowLoading(false);
props.history.push('/show/' + response.data._id);
})
.catch(error => setShowLoading(false));
我已成功从后端接收访问密钥,并且我的 cookie 可以在 Chrome 上的开发工具的应用程序部分中看到。
但是,从这一点来看,我对如何才能访问需要身份验证的页面感到有些困惑。我有一个页面,我正在使用 axios 发出获取请求:
const user = await axios
.get(`http://localhost:8000/api/users/${username}/complete/`, { withCredentials: true })
.then(function(response) {
return response.data;
});
如何告诉我的后端我的访问密钥存储在一个名为 jwtCookie 的 cookie 中,以便它可以让我执行获取请求?我正在使用 Django Rest Framework 并将此页面上的权限类设置为 IsAuthenticated。
我知道我的知识在某个地方存在差距,我希望有人可以帮助我弥合这个差距。谢谢!
解决方案
有几种方法可以使用您的 API 进行身份验证,并且 DRF 支持很多。您正在使用令牌身份验证,在这种情况下,您需要在Authorization
HTTP 标头中提供令牌。
您可以像这样指定全局 axios 默认值,
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
您可以在创建这样的实例时设置它,
const instance = axios.create({
baseURL: 'http://localhost:8000/api',
headers: {'Authorization': AUTH_TOKEN}
});
或者之后,
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
推荐阅读
- python - 在python3中通过引用传递二叉树
- reactjs - 如何引用我以编程方式创建的元素的 id?
- python - 在从 DataFrame 的顶行创建的新列下对 pandas 列进行分组
- azure-devops - 如何保护 Azure Devops 中的 azure-pipelines.yml 管道文件
- javascript - 打字稿将缺少的方法添加到导出的库类
- c++ - 回文数在平方时为回文的范围内的 C++ 代码
- node.js - 为什么 node.js 没有将我的会话传递给它调用的段
- ckeditor - 如何在ckeditor 5中配置tablecellproperties
- javascript - 将 api-controller 的 try-catch-block 外包到一个地方
- javascript - 使用自定义属性变量时 CSS 属性不会改变