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', вы не использовали replaced токен, но простой 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;
                }
            })
        })
Другие вопросы по тегам