Программная аутентификация приложения Vue с использованием Auth0 с Cypress - PullRequest
0 голосов
/ 13 июля 2020

В настоящее время я использую Cypress для тестирования нашего Vue SPA. Однако у меня проблема с программным входом в систему через Auth0. Я следовал этому руководству , чтобы создать команду формы:

Cypress.Commands.add('login', (overrides = {}) => {
  Cypress.log({
    name: 'loginViaAuth0'
  })

  const options = {
    method: 'POST',
    url: Cypress.env('auth_url'),
    body: {
      grant_type: 'password',
      username: Cypress.env('auth_username'),
      password: Cypress.env('auth_password'),
      audience: Cypress.env('auth_audience'),
      scope: 'openid profile email',
      client_id: Cypress.env('auth_client_id'),
      client_secret: Cypress.env('auth_client_secret')
    }
  }
  cy.request(options)
})

и тест:

describe('login', () => {
  
  it('should successfully log in', () => {
    cy.login()
      .then((resp) => {
        return resp.body;
      })
      .then((body) => {
        console.log(body)
        const {access_token, expires_in, id_token} = body;
        const auth0State = {
          nonce: '',
          state: 'some-random-state'
        };
        const callbackUrl = `/dashboard#access_token=${access_token}&scope=openid&id_token=${id_token}&expires_in=${expires_in}&token_type=Bearer&state=${auth0State.state}`;
        cy.visit(callbackUrl, {
          onBeforeLoad(win) {
            win.document.cookie = 'com.auth0.auth.some-random-state=' + JSON.stringify(auth0State);
          }
        });
        cy.url().should('include', '/dashboard')
      })
  });

Это ответ сервера:

{
  access_token: "some-access-token",
  expires_in: 86400,
  id_token: "some-id-token",
  scope: "openid profile email ..."
  token_type: "Bearer"
}

Затем я объединил этот ответ с URL-адресом, как описано в руководстве, как показано в тесте. К сожалению, я до сих пор не авторизован, поэтому не могу получить доступ к «приборной панели» охраняемого маршрута. Надеюсь, ты скажешь мне, в чем моя ошибка.

...