解析服务器:如何区分注册和常规parseuser.save在用户类Beforesave中



这是一个与parse.com不同行为不同的问题。我的应用中有匿名用户,并且在使用Parseuser.signup(Android SDK)时,Parse-Server和Parse.com之间存在重要的区别。Parse.com将首先检查用户名冲突,如果有一个,则beforesave函数甚至不会被调用。这使我能够在beforesave代码中做出一些假设。

现在在解析服务器中,beforesave总是被调用,只有在我响应之后。success()才无法保存它。问题在于,如果内部注册失败(例如重复的用户名),则不应发生一些代码,但无论如何都会发生,因为我假设如果称为beforesave,则用户名是唯一的。我的解决方案是通过用户名上的放学士自己进行检查,但是现在还有另一个问题 - 我如何区分匿名用户和新用户?

在我的应用中,每个新用户都会自动保存为匿名用户。对于匿名用户,您无法做一些事情(例如,更改用户名)。一段时间后,当他想注册时,他进入了一个用户名,在Beforesave中,我无法判断他是否只是想更改用户名,还是他正在注册?如果他想注册,我应该允许他设置用户名,但是如果他只是想更改他的用户名,那么我想拒绝更改。

因此,总结:我该如何在用户类中判断beforesave是否称为注册或定期保存?

您可以尝试在beforesave中使用.existed()函数?

Parse.Cloud.afterSave(Parse.User, function(request) {
    if(!(request.object.existed())){
      //Not sure what anonymous user would return here...
    }
});

我在文档中找不到任何明显的东西,但是在分析了beforesave钩的请求对象之后,我找到了一个解决方案:

  1. 验证authData对象是否包含匿名键告诉我们是否保存了匿名用户。注册后,authDataundefined

    var authdata = request.object.get(" authdata");如果(authdata!= undefined&& authdata.anonymous!= undefined){ console.log(" ####用户是匿名的"); 响应success();//保存并返回 返回;}

要弄清楚用户是否刚刚注册,您将比较是否设置了电子邮件地址(没有更改,但以前未定义)。您通过向request.original询问电子邮件来做到这一点:

// object now has an email for the first time
if (request.object.get("email") != undefined &&
    request.original.get("email") == undefined) {
    console.log("#### User signed up");
    …
}

我不确定推荐的方法是什么,但这似乎可以将匿名用户与真实的,注册用户区分开来。

最新更新