Ember.js:查询参数被操纵了吗?

时间:2014-07-05 14:23:57

标签: javascript rest url ember.js base64

我正在使用ember的查询参数功能来验证我的服务器上的帐户是否有激活网址。

网址看起来像这样:

http://myapp/activation/?id=ZDE2ZTE2MTItYTFmMC00Zjk1LWJhZGUtMGYwNWE1ZDA2ZmRl&code=OGQ4MTQyYzQ5MTVjMGIxNGY4ZDk4MDYxMWRiZGU4N2EzMjY3ZDRhZA==

服务器的参数是Base64编码的。

我的activation.js控制器在某处执行此操作:

    Em.$.ajax({
        url: "http://localhost:8080/myapp/api/activation",
        type: "POST",
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify({
            id: this.get("id"),
            code: this.get("code")
        }),
        success: function () {
           // ...
        },
        error: function () {
            // ...
        }

服务器接收到正确的id,但最后代码略有不同。代码参数的尾随==字符被截断。

我可以通过手动添加它来解决这个问题:

data: JSON.stringify({
    id: this.get("id"),
    code: this.get("code") + "=="
}),

这看起来不太可靠。

有趣的是,如果我解码字符串:console.log(atob(this.get("code")));结果是正确的,则包含尾随字符。

我很困惑。有人能告诉我是否有错误或者我做错了什么。

更新:

看起来很愚蠢,但似乎是一个可靠的解决方法:

data: JSON.stringify({
    id: this.get("id"),
    code: btoa(atob(this.get("code")))
}),

1 个答案:

答案 0 :(得分:2)

“=”字符用作base64编码的填充(编码字符串的长度“必须”是4的倍数)。但是,如果您使用的解码算法处理无填充字符串,则不必对字符串执行任何操作。在你的情况下,

OGQ4MTQyYzQ5MTVjMGIxNGY4ZDk4MDYxMWRiZGU4N2EzMjY3ZDRhZA==

相同
OGQ4MTQyYzQ5MTVjMGIxNGY4ZDk4MDYxMWRiZGU4N2EzMjY3ZDRhZA

您可以在http://www.base64decode.org/

查看