肯定遗漏了一些明显的东西,但由于它的 CSRF 保护,我非常坚持登录到 Django。
我查看了使用 cy.getCookie() 来测试使用 HTML Web 表单登录的示例食谱,但如果它推荐的第一件事是禁用 CSRF,那确实没有多大帮助。
这是正常的、受 CSRF 保护的 Django 登录视图在其传入的 POST 数据中所期望的:
csrfmiddlewaretoken=Y5WscShtwZn3e1eCyahdqPURbfHczLyXfyPRsEOWacdUcGNYUn2EK6pWyicTLSXT
username=guest
password=password
next
Run Code Online (Sandbox Code Playgroud)
它不是在请求头中寻找 CSRF,也不x-csrf-token是在响应头上设置。
而且,使用我的代码,我从不传入让 Django 返回 403 错误的 csrf 令牌。
Cypress.Commands.add("login", (username, password) => {
var login_url = Cypress.env("login_url");
cy.visit(login_url)
var hidden_token = cy.get("input[name='csrfmiddlewaretoken']").value;
console.log(`hidden_token:${hidden_token}:`)
console.log(`visited:${login_url}`)
var cookie = cy.getCookie('csrftoken');
// debugger;
var csrftoken = cy.getCookie('csrftoken').value;
console.log(`csrftoken:${csrftoken}:`)
console.log(`request.POST`)
cy.request({
method: 'POST',
form: true,
url: login_url,
// body: {'username': 'guest', 'password': 'password', 'csrfmiddlewaretoken': cy.getCookie('csrftoken').value} …Run Code Online (Sandbox Code Playgroud)