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