URL-адрес перенаправления с параметром токена, содержащим '+'
У меня возникают проблемы с созданием перенаправления на URL-адрес из API, который я использую в своем приложении. Я прошуsession token
который используется в URL-адресе перенаправления, но у меня возникают проблемы, когда токен содержит +
в этом. Я предполагаю, что браузер воспринимает это какspace
вместо фактического символа токена, который часто приводит к сбою перенаправления.
Вот пример токена, который может возвращаться из запроса к API: 1w5OX65MRj+3J9R5AXjMWQLAAXIo5TXa
Глядя на вкладку сети, я вижу, что вместо этого он пытается запросить перенаправление с помощью этого токена:1w5OX65MRj 3J9R5AXjMWQLAAXIo5TXa
, из-за чего возникают проблемы.
Я попытался заменить +
с %2B
но похоже, что мое приложение его вообще не заменяет, что для меня немного странно.
Вот мой код:
let token = "";
$.get('/_token_req', {contentType: "application/x-www-form-urlencoded"}, (response) => {
//console.log(response);
token = response;
token = token.replace(/\+/g, "%2B"); // this doesn't replace the + character for some reason
$.get('/_redirect', {token: response}, (response) => {
//console.log(response);
if(response == "OK"){
window.location.href = "https://someapi/payments/?auth_token=" + token;
}
})
})
Я не очень разбираюсь в кодировке URL-адресов, но если бы кто-то мог указать мне правильное направление, это было бы очень полезно. Спасибо!
1 ответ
У вас есть 2 проблемы с вашим кодом:
Тот, который вам нужно использовать encodeURIComponent
чтобы закодировать любые символы в вашем токене, чтобы его можно было отправить соответствующим образом.
Два, при вызове второго запроса $.get('/_redirect'
, вы не использовали replace
d токен, но простой response
что вы получили из предыдущего запроса.
Измените свой код на этот, чтобы устранить обе ошибки:
let token = "";
$.get('/_token_req', {contentType: "application/x-www-form-urlencoded"}, (response) => {
token = encodeURIComponent(response);
$.get('/_redirect', {token: token}, (response) => {
if(response == "OK"){
window.location.href = "https://someapi/payments/?auth_token=" + token;
}
})
})