使用javascript从页面获取csrf令牌

时间:2018-10-07 20:37:16

标签: javascript html

我正在尝试使用javascript从Django支持的网页中提取csrf令牌。

我的html模板如下:

<div class = "debugging">
  <p id = "csrf">{% csrf_token %}</p>
</div>

当我在下面使用此脚本时,我可以在控制台中看到令牌值,但实际上无法提取它:

<script>
var csrfToken = document.getElementById("csrf");
console.log(csrfToken.innerHTML);
</script>

它在控制台中返回:

<input type="hidden" name="csrfmiddlewaretoken" 
value="AAIawsx1XysoQpDyIqyzdPe3npopNCHRzFBQdvUdlr4TUPEq3Sr5C5bFqc">

所以我尝试了:

var csrfToken = document.getElementById("csrf").attributes[0].value;
var csrfToken = document.getElementById("csrf").value;

均返回“ undefined”

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您的django似乎创建了一个包含令牌的输入元素,因此只需使用querySelector进行选择并读取其value

var csrfToken = document.querySelector("#csrf input").value;

由于您的Django代码还在该输入元素上生成了name="csrfmiddlewaretoken",因此您也可以这样做:

var csrfToken = document.getElementsByName('csrfmiddlewaretoken')[0].value;

答案 1 :(得分:1)

我在新的 Laravel 中尝试过这个。它是 Vanilla JS,可以在任何地方调用。在 JS 或刀片文件中。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *getContents(char filename[]) {
    char text[1000];
    int i, c;
    FILE *fp = fopen(filename, "r");
    if (fp == NULL)
        return NULL;
    for (i = 0; i < sizeof(text) - 1 && ((c = fgetc(fp)) != EOF; i++) {
        text[i] = c;
    }
    text[i] = '\0';
    fclose(fp);
    return strdup(text);
}

int main() {
    char *p = getContents("text.txt");
    if (p != NULL) {
        printf("%s\n", p);
        free(p);
    }
    return 0;
}