0

我在创建从我在应用程序中使用的 API 到 URL 的重定向时遇到问题。我请求session token在重定向 URL 中使用的 a,但是当令牌中包含 a 时我遇到了问题+。我的猜测是浏览器将其作为 aspace而不是实际的令牌字符来选择,这导致重定向经常失败。

这是一个可以从对 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 编码知之甚少,但如果有人能指出我正确的方向,那将非常有帮助。谢谢!

4

1 回答 1

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;
                }
            })
        })
于 2020-05-18T20:22:56.437 回答