使用Express.js和node-multiparty解析NSData

时间:2015-04-04 18:13:37

标签: ios node.js express afnetworking

我正在构建一个iOS应用程序,它连接到运行MongoDB的Node / Express.js后端,并使用Nginx作为反向代理。在客户端,我正在使用AFNetworking。当通过网络将密码作为加密的NSData对象发送时,我遇到了一个问题(我正在使用带有AES 256位加密的RNCryptor)。 我有两个身份验证调用:

/api/signup (POST)

/api/login (POST)

signup接受多部分请求并使用node-multiparty处理表单。

这是我的示例表单解析代码:

var deferred = q.defer();
var form = new multiparty.Form();
var image, email, userName, password, path = null;

//attach the image, create the user, and embed a session token.
form.on('close', function(){
    console.log(password);

});

form.on('file', function(name, file){
    path = file.path;
});

form.on('field', function(name, value){
    if(name == "email"){
        email = value;
    }else if(name == "name"){
        userName = value;
    }else if(name == 'password') {
        password = value;
    }else return;
});

//user profile picture
form.on('part', function(part){
     if (!part.filename) return;
     if (part.name !== 'image') return part.resume();
     image = {};
     image.filename = part.filename;
     image.size = 0;
     part.on('data', function(buf){
       image.size += buf.length;
     });
});

// parse the form
form.parse(request);

return deferred.promise;

当密码记录到控制台时,我得到预期的输出,主要是随机的acsii字符(例如G Bgq g +)。

对于登录呼叫,它不是多部分请求,密码参数仅存在于request.body.password中。当我使用相同的密码记录该属性时,我得到这样的信息:

< 03018858 90f432f1 3230fc6d 3b419e06 a7d1b382 dab31581 4f622184 9d412ba2 1a7ddbda c416e203 57fee0e0 bf553ddf ace1e8c7 af098c5e f5c37b59 68ceb8c4 36dbf12e 3a9d3d15 fdbe5aee bb19bc94 2a8d>

看起来多部分请求中的password参数被解析为字符串值,而普通post请求中的password参数将被记录到NSData对象的Xcode控制台。

现在我无法弄清楚这种情况发生在哪里,如果它在客户端使用AFNetworking(可能它处理不同于多部分的NSData参数)或者它是节点多方的结果。即使这样,我也不确定如何缓解这个问题,除了不必要地将常规POST调用更改为多部分请求,这样我就可以获得相同的行为。任何帮助或见解将不胜感激。

编辑:我觉得我应该提到我的应用中的密码首先使用RNCryptor进行加密,然后发送到后端并使用bcrypt再次加密。我遇到的问题是在客户端输入相同的密码时,尽管运行相同的加密过程,但它们在服务器上不匹配。

0 个答案:

没有答案