我正在尝试使用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”
感谢您的帮助!
答案 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;
}