В настоящее время я использую 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-адресом, как описано в руководстве, как показано в тесте. К сожалению, я до сих пор не авторизован, поэтому не могу получить доступ к «приборной панели» охраняемого маршрута. Надеюсь, ты скажешь мне, в чем моя ошибка.