相关疑难解决方法(0)

使用 Cypress.io 以编程方式登录 Django 服务器(不使用 UI)

肯定遗漏了一些明显的东西,但由于它的 CSRF 保护,我非常坚持登录到 Django。

查看了使用 cy.getCookie() 来测试使用 HTML Web 表单登录的示例食谱,但如果它推荐的第一件事是禁用 CSRF,那确实没有多大帮助。

Django 想要什么:

这是正常的、受 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)

django cypress

8
推荐指数
2
解决办法
3405
查看次数

标签 统计

cypress ×1

django ×1