Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Cypress登录WordPress,不使用UI_Javascript_Wordpress_Cypress - Fatal编程技术网

Javascript 使用Cypress登录WordPress,不使用UI

Javascript 使用Cypress登录WordPress,不使用UI,javascript,wordpress,cypress,Javascript,Wordpress,Cypress,在状态中,他们表示不应该使用UI设置状态 但是看起来WordPress在API中没有登录的可能性。 由于黑客攻击在大多数WordPress网站上都是一个问题,所以我不想添加它 如何使用Cypress登录WordPress,而不使用UI 更新2020-09-03 如果没有办法,那么我只是在寻找最好的方法。它是为了在某个地方实现某个隐藏的API登录端点吗?还是无视Brian Mann的建议,只使用UI 更新2020-10-02 首要问题 我自己一头扎进去。我想,我可以设置登录时放置的cookie

在状态中,他们表示不应该使用UI设置状态

但是看起来WordPress在API中没有登录的可能性。 由于黑客攻击在大多数WordPress网站上都是一个问题,所以我不想添加它

如何使用Cypress登录WordPress,而不使用UI


更新2020-09-03

如果没有办法,那么我只是在寻找最好的方法。它是为了在某个地方实现某个隐藏的API登录端点吗?还是无视Brian Mann的建议,只使用UI


更新2020-10-02

首要问题 我自己一头扎进去。我想,我可以设置登录时放置的cookies。那一定是最好的办法。所以我们的目标是做这样的事情:

  • 以点击方式登录(这是不受欢迎的)
  • 提取步骤1成功后设置的Cookie
  • 在用户必须登录的所有测试之前设置这些cookie

  • 请注意,当您阅读有关Cypress的文章时,这可能接近于许多地方提到的反模式。所以,如果你想和布莱恩·曼成为朋友,可能就不要这样做。但我的意思是。。。谁需要这个家伙

    我不相信没有插件和/或自定义代码就可以通过API登录-请参阅wordpress/stackexchange上的此线程

    然而,我认为如果您使用管理您的插件,您可以通过将所需插件添加为require-dev来缓解您的漏洞利用问题

    如果您不使用composer,请查看类似于该项目的内容,它为Wordpress提供了更现代的体系结构


    一旦将auth插件添加为开发人员依赖项,您就应该能够在本地/登台上通过Cypress进行无头身份验证,同时确保生产的安全性。

    以下是您的操作方法。这花了我几个小时,但这对我来说很有效,而且经过了彻底的测试。我确实交换了下面的变量(显然)

    我做了一系列命令,以便在测试之间快速登录/注销


    警告 请记住将
    adminUserLoginCookiesFromCypress.json
    添加到您的
    .gitignore
    ——并且不要将其上载到您的服务器。如果这被错误的人掌握,那么某人将能够以你的用户身份登录(通过将cookies添加到他们自己的浏览器中)


    环境 此内容位于项目根目录中的
    cypress.json

    {
      "env": {
        "baseUrl": "https://s1.demo.opensourcecms.com/wordpress",
        "dashboardUrl": "https://s1.demo.opensourcecms.com/wordpress/wp-admin",
        "domain": "s1.demo.opensourcecms.com/wordpress",
        "users": {
          "admin": {
            "username": "opensourcecms",
            "email": "test@example.org",
            "pw": "opensourcecms"
          }
        }
      },
    }
    
    Cypress.Commands.add( "getWordPressCookies", () => {
      cy.getCookies()
        .then( (cookies) => {
          cy.writeFile( 'adminUserLoginCookiesFromCypress.json', cookies );
        });
    });
    
    命令
    清除cookies

    由于某种原因,我不能(也不能)让
    cy.clearCookies()
    工作。 如果我运行一个登录到WP的测试,那么当测试第二次运行时,它仍然会被记录。即使我运行
    cy.clearCookies()
    第一件事(?)

    此手动/特定clearCookie命令适用于我:

    Cypress.Commands.add( "clearWordPressCookies", () => {
      cy.clearCookie( 'wordpress_a8b94154380982c3184a469b8aa525c6' );
      cy.clearCookie( 'wordpress_a8b94154380982c3184a469b8aa525c6' );
      cy.clearCookie( 'wordpress_logged_in_a8b94154380982c3184a469b8aa525c6' );
      cy.clearCookie( 'wordpress_test_cookie' );
    });
    
    记住找到站点的实际cookie名称并替换哈希


    获取cookies

    将cookies保存到文件(在项目根目录中)


    设置cookies

    设置保存文件中的Cookie(从Get Cookie函数)


    手动登录

    这必须在第一次完成,才能让WordPress生成cookies

    Cypress.Commands.add( "manualWordPressLogin", () => {
      cy.clearWordPressCookies();
      cy.visit( Cypress.env('dashboardUrl') );
      cy.get('#user_login').wait(200).type( Cypress.env('users').admin.username , { force: true } );
      cy.get('#user_pass').wait(200).type( Cypress.env('users').admin.pw, { force: true } );
      cy.get('#wp-submit').click();
      cy.get('h1').contains( 'Dashboard' );
    });
    

    示例用法
    这无疑让我走上了正确的道路!我实际上花了好几个小时(真的是好几天)在想什么时候设置cookies。当柏树被打扰的时候。我与您的唯一不同之处在于登录命令的最后一步是保存cookies,然后运行。。否则,谢谢你,先生:)
    Cypress.Commands.add( "manualWordPressLogin", () => {
      cy.clearWordPressCookies();
      cy.visit( Cypress.env('dashboardUrl') );
      cy.get('#user_login').wait(200).type( Cypress.env('users').admin.username , { force: true } );
      cy.get('#user_pass').wait(200).type( Cypress.env('users').admin.pw, { force: true } );
      cy.get('#wp-submit').click();
      cy.get('h1').contains( 'Dashboard' );
    });
    
    context( 'Login, set and prep cookies' , function () {
    
      it( 'Ensure no one is logged in', function() {
        cy.clearWordPressCookies();
        cy.visit( Cypress.env('dashboardUrl') );
        cy.location('pathname').should('eq', '/wp-login.php' ); // Not logged in
      });
    
    
      it( 'Logs in a admin user', function(){
        cy.manualWordPressLogin();
        cy.getWordPressCookies();
        cy.visit( Cypress.env('dashboardUrl') );
        cy.location('pathname').should( 'match', /^\/wp-admin/ );
      });  
      
    
      it( 'logs out the user - and logs back in using setting wp-cookies', function(){
        cy.clearWordPressCookies();
        cy.visit( Cypress.env('dashboardUrl') );
        cy.location('pathname').should( 'match', /^\/wp-login\.php/ ); // Not logged in
        cy.setWordPressCookies();
        cy.visit( Cypress.env('dashboardUrl') );
        cy.location('pathname').should( 'match', /^\/wp-admin/ ); // Is logged in
      });
    
    });