解析 - 为什么user.getSessionToken()返回undefined

时间:2015-04-07 10:08:40

标签: javascript parse-platform

我正在使用云功能来获取用户的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());
    });
});

1 个答案:

答案 0 :(得分:6)

由于用户在通过云代码获取用户时未登录,因此无法正常工作。要使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();
});