Javascript Parse-为什么user.getSessionToken()返回未定义的

Javascript Parse-为什么user.getSessionToken()返回未定义的,javascript,parse-platform,Javascript,Parse Platform,我正在使用云函数获取用户的sessionToken。文档中说,此方法仅在使用主密钥获取用户对象时返回正确的值。但是,即使使用主密钥,仍然会得到未定义的结果。我的代码怎么了 Parse.Cloud.define("hello", function(request, response) { Parse.Cloud.useMasterKey(); Parse.Promise.as().then(function(){ var query = new Parse.Quer

我正在使用云函数获取用户的sessionToken。文档中说,此方法仅在使用主密钥获取用户对象时返回正确的值。但是,即使使用主密钥,仍然会得到未定义的结果。我的代码怎么了

Parse.Cloud.define("hello", function(request, response) {
    Parse.Cloud.useMasterKey();
    Parse.Promise.as().then(function(){
        var query = new Parse.Query(Parse.User);
        return query.first({useMasterKey:true});
    }).then(function(user){
        return user.fetch({useMasterKey:true});
    }).then(function(user){
        response.success(user.getSessionToken());
    });
});

这将不起作用,因为当您通过云代码获取用户时,用户未登录。要使getSessionToken正常工作,您需要有一个已登录的用户。因为,否则,CloudCode如何知道您想要获得用户的哪个会话?(如果他登录了多个设备)而且您的代码返回数据库中的第一个用户,这真的是您想要的吗

无论哪种方式,您都需要通过云代码登录用户,然后返回会话令牌。但是,在没有密码的情况下(只需调用user.logIn(),它应该可以工作,所以请尝试一下),我发现的唯一解决方案是更改用户的密码,然后让他登录。为什么需要获取用户的会话令牌?如果您不介意更改用户密码,可以执行以下操作:

var password; //create new random passowrd
query.first({useMasterKey: true}).then(function(user){
    user.set("password", password);
    return user.save();
}).then(function(user){
    return Parse.User.logIn(user.get("username"), password);
}).then(function(user){
    return user.getSessionToken();
});

您的用户是否有
useMasterKey
密钥?从用户的角度来看,您的实际目标是什么(谁使用这个云函数,为什么使用它)?问题中的代码只是一个演示。我的目标是做第三方登录,在这种情况下,密码是随机生成的。根据文档,如果我使用主密钥获取用户,即使用户未登录,
getSessionToken()
也应该工作。我想我可能会触发一个解析错误。因为在另一个应用程序中,它可以正常工作。是的,它曾经是这样工作的。但是,如果您将parse sdk升级到版本1.4,其中添加了parse.Session,它将停止对我工作。我不知道这是不是一个错误。我还必须建立一个第三方登录,如果你想查看的js代码在。虽然这个解决方案似乎黑客,它的工作就像一个魅力。我使用的是sdk 1.4.2。