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

Hen*_*iao 3 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());
    });
});
Run Code Online (Sandbox Code Playgroud)

Fel*_*mit 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();
});
Run Code Online (Sandbox Code Playgroud)