栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Django RESTful API和React中使用csrf_token?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Django RESTful API和React中使用csrf_token?

第一步是获取CSRF令牌,该令牌可以从Django csrftoken cookie中检索。

现在,从Django文档中,您可以找到如何通过使用以下简单的Javascript函数从cookie中获取csrf令牌:

function getcookie(name) {    var cookievalue = null;    if (document.cookie && document.cookie !== '') {        var cookies = document.cookie.split(';');        for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); if (cookie.substring(0, name.length + 1) === (name + '=')) {     cookievalue = depreURIComponent(cookie.substring(name.length + 1));     break; }        }    }    return cookievalue;}

现在,您可以通过调用

getcookie('csrftoken')
函数来检索CSRF令牌

var csrftoken = getcookie('csrftoken');

接下来,通过将检索到的令牌分配给X-CSRFToken标头,可以在通过fetch()发送请求时使用此csrf令牌。

  fetch(url, {    credentials: 'include',    method: 'POST',    mode: 'same-origin',    headers: {      'Accept': 'application/json',      'Content-Type': 'application/json',      'X-CSRFToken': csrftoken    },    body: {}   })  }

以React形式呈现CSRF令牌:

如果您使用React来呈现表单而不是Django模板,则还需要呈现csrf令牌,因为Django标签

{ % csrf_token %}
在客户端不可用,因此您需要创建一个更高阶的组件来使用该
getcookie()
函数检索令牌并呈现它任何形式。

让我们在

csrftoken.js
文件中添加一些行。

import React from 'react';var csrftoken = getcookie('csrftoken');const CSRFToken = () => {    return (        <input type="hidden" name="csrfmiddlewaretoken" value={csrftoken} />    );};export default CSRFToken;

然后,您可以简单地将其导入并在表单中调用它

import React, { Component , PropTypes} from 'react';import CSRFToken from './csrftoken';class aForm extends Component {    render() {        return (      <form action="/endpoint" method="post">  <CSRFToken />  <button type="submit">Send</button>      </form>        );    }}export default aForm;

Django CSRF Coo​​kie

React使用动态方式呈现组件,这就是如果您使用React呈现表单时Django可能无法设置CSRF令牌cookie的原因。Django文档是这样说的:

如果您的视图未呈现包含csrftoken
template标签的模板,则Django可能未设置CSRF令牌cookie。在将表单动态添加到页面的情况下,这很常见。为了解决这种情况,Django提供了一个视图装饰器来强制设置cookie:surecsrf_cookie()。

为了解决这个问题,Django提供了需要添加到view函数中的surecsrfcookie装饰器。例如:

from django.views.decorators.csrf import ensure_csrf_cookie@ensure_csrf_cookiedef myview(request):


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号