2016-12-03 81 views
1

我在调用user.signUp()时收到invalidsessiontoken错误。 这个过程是我打电话给我的云代码函数来创建一个新用户,并发回sessionToken成为客户端的用户。 云代码:解析服务器注册invalidsessiontoken错误

var user = new Parse.User(); 
user.set("firstname", fname); 
user.set("lastname", lname); 
user.set("birthdate", birthdate); 
user.set("username", email); 
user.set("email", email); 
user.set("password", pass); 
user.set("emailVerified", false); 
user.signUp(null, { 
    success: function(user){ 
     var acl = new Parse.ACL(); 
     acl.setPublicReadAccess(false); 
     acl.setPublicWriteAccess(false); 
     user.setACL(acl); 
     user.save(null, { 
      useMasterKey: true 
     }).then(function(user){ 
      sendEmailVerification(user.get("email"), function(error){ 
       if(error){ 
        console.log("USER SENDEMAILVERIFICATION ERROR!!!!!!!!!!!!!!"); 
        sendMsg(res, error.code, error.message); 
        return; 
       } 
       sendMsg(res, 200, user.getSessionToken()); 
      }); 
     }, function(error){ 
      console.log("USER SAVE ERROR!!!!!!!!!!!!!!!!"); 
      sendMsg(res, error.code, error.message); 
     }); 
    }, error: function(user, error){ 
     console.log("USER SIGNUP ERROR!!!!!!!!!!!!!!!!!!") 
     sendMsg(res, error.code, error.message); 
    } 
}); 

invalidsessiontoken总是出现在用户注册时出错。 我不确定是什么原因造成的,因为我认为那时候甚至不应该有会话令牌。当在客户端发现invalidsessiontoken错误时,我尝试呼叫注销,然后重新启动云代码,但会导致无限循环。

+0

为什么不在客户端做呢? 当你使用成为方法时,你可以发布你的客户端吗? – Alon

回答

1

当您使用user.signUp时,在创建用户之后,连接用户。 在这种情况下,这不是一个好主意连接到云代码的问题。

它们与常规解析中的云代码有所不同。如果您在一个功能中连接并且另一个用户运行云功能,则您仍然与第一个用户连接。 出于同样的原因,他们在云代码中不是Parse.User.current()

我认为最好的选择是从客户端注册。您不必传递会话令牌并使用become函数。

如果要检查值使用beforesave触发器,然后决定是否创建或不创建用户。

+0

谢谢@Alon当我回到我的电脑测试 – thailey01

+0

时,我会将注册移动到客户端。我决定在云代码中调用signUp的一个原因是因为它更安全 – thailey01

+0

为什么?看看我编辑的答案,使用'beforesave'触发器 – Alon