我正在尝试编写一个在User对象上添加或编辑某些字段的函数。
当我尝试保存用户时出现问题,如果我使用user.save
,则承诺被拒绝且错误为206 UserCannotBeAlteredWithoutSessionError
。
但是,如果我得到会话ID(并且有关该文档的文档很少),则承诺永远不会得到解决,也不会被拒绝。该应用程序似乎只是跳转到回调。
我的功能:
function update(user, callback) {
let query = new Parse.Query(Parse.User);
query.equalTo("username", user.email);
query.find().then(
(users) => {
if(users.length === 0) {
callback('Non existent user');
} else {
let user = users[0];
// user.set('some', 'thing');
console.log('save');
user.save(/*{
sessionToken: user.getSessionToken()
}*/).then(
(test) => {
console.log('OK - ' + test);
callback();
}, (err) => {
console.log('ERR- ' + require('util').inspect(err));
// console.log(callback.toString());
callback(error.message);
}
);
}
},
(error) => {
callback(error.message);
}
);
}
跟:
var async = require('async'),
baas = require('./baas.js');
async.waterfall([
(callback) => {
callback(null, {
email: 'user@test.com',
password: 'password'
});
},
(user, callback) => {
console.log('connect');
baas.connect(() => { //Initialize the connection to Parse, and declare use of masterKey
callback(null, user);
});
},
(user, callback) => {
console.log('update');
baas.update(user, (err) => {
callback(err);
});
}
], (err) => {
console.log('Error: ' + err);
});
日志变为: 没有会话令牌:
connect
update
save
ERR- ParseError { code: 206, message: 'cannot modify user sA20iPbC1i' }
使用会话令牌:
connect
update
save
我不明白承诺如何在不打印任何内容的情况下回调,也不知道为什么在任何地方都不会出现错误。
编辑:
根据@ user866762建议,我尝试将查询替换为Parse.User.logIn
并使用生成的User
对象。
虽然这个解决方案给了我一个sessionToken
,但最终结果是相同的,如果我不提供会话令牌就解析崩溃,或者如果我这样做就给我一个错误。
答案 0 :(得分:1)
...除非使用经过身份验证的方法获取
save
,否则您无法调用任何delete
或Parse.User
方法,例如logIn
或{{ 1}}。
在保存之前,您也可以尝试使用becoming用户,但我对此有疑问。
当你“得到会话ID”时,我的猜测是你真的在破坏某些东西。无论是Parse对您要求会话令牌都有心脏病发作,或者当您在signUp
中传递它时,您会导致某些事情爆炸。