У меня возникла проблема с порядком асинхронного выполнения .then() в запросе на выборку в моем сценарии JavaScript. Предполагается, что сценарий получит токен аутентификации, а затем установит его в переменной среды. Однако похоже, что вызов URL-адреса моего приложения происходит до выполнения цепочек .then(), что приводит к использованию неустановленного токена. Мне нужно, чтобы токен был получен и установлен перед последующим запросом. Таким образом, он успешно извлекает токен, и сценарий выполняется до первой части выборки, но до .then он вызывает URL-адрес, а затем выполняет остальную часть сценария.
const authUrl = "https://auth0.com/oauth/token";
const authBody = JSON.stringify({
grant_type: "password",
client_id: "client_id",
client_secret: "client_secret",
scope: "openid profile email",
audience: "https://audience/",
username: "username",
password: "password"
});
console.info("nach dem ziehen des token")
// Execute the fetch request to authenticate
fetch(authUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: authBody
})
.then(response => response.json())
.then(data => {
if (data.access_token) {
// Set the access token in an environment variable
pw.env.set("accessToken", data.access_token);
pw.env.set("accessToken", data.access_token);
console.info("accessToken set:", data.access_token); // to check the log
} else {
console.error('Error retrieving the token:', data);
}
})
.catch(error => console.error('Error in fetching auth token:', error));
@RaffaeleLungarella Я не получаю «выборку» неизвестного идентификатора для сценария, может быть, это связано с браузером? Я использую Chrome
Я получаю это из любого браузера и даже из настольного приложения. Я в полном замешательстве, так как в их репозитории на GitHub есть эта проблема: github.com/hoppscotch/hoppscotch/issues/3305. Кажется, что этой функции не существует, а вы ее используете. Я читаю что-то не так?
Я все еще использую приведенный ниже сценарий предварительного запроса, и он работает нормально. Я использую его для одного запроса, и после того, как я сделал этот запрос, я могу использовать <<access_token>> и в других запросах, как сказано здесь docs.hoppscotch.io/documentation/getting-started/rest/…
Я решил эту проблему, объявив функцию и вызвав ее в конце:
const authUrl = pw.env.get("auth0_url")+"/oauth/token";
const authBody = JSON.stringify({
grant_type: "password",
client_id: pw.env.get("client_id"),
client_secret: pw.env.get("client_secret"),
scope: "openid profile email",
audience: pw.env.get("audience"),
username: pw.env.get("username_auth0"),
password: pw.env.get("password_auth0"),
});
function authenticate() {
try {
const request = new XMLHttpRequest();
request.open("POST", authUrl, false);
request.setRequestHeader("Content-Type", "application/json");
request.send(authBody);
if (request.status === 200) {
const data = JSON.parse(request.responseText);
if (data.access_token) {
pw.env.set("accessToken", data.access_token);
console.info("accessToken set:", data.access_token);
// Zusätzlich überprüfen, ob es korrekt gesetzt wurde
let token = pw.env.get("accessToken");
console.info("Retrieved accessToken:", token);
} else {
console.error('Error retrieving the token:', data);
pw.env.set("accessToken", "");
}
} else {
console.error('Error in fetching auth token. Status:', request.status);
pw.env.set("accessToken", "");
}
} catch (error) {
console.error('Error in fetching auth token:', error);
pw.env.set("accessToken", "");
}
}
// Funktion aufrufen, um die Authentifizierung durchzuführen
authenticate();
Вы уверены, что не получаете ошибку CORS? Я спрашиваю об этом, потому что в классиках, если переменная env установлена один раз, она будет жить там впоследствии. Таким образом, в любом случае, если вы заполнили accessToken, он останется там, и вы заметите это, пока не истечет срок его действия. вы можете проверить, заглянув в консоль F12.
Да, токен доступа действителен, пока я его не изменю, но я не получаю ошибку Cors.
Как вам удалось избежать
[semantic] Unknown identifier 'fetch'
в сценарии?