【问题标题】:Calling ParseUser.save deletes Session调用 ParseUser.save 删除 Session
【发布时间】:2015-05-29 20:12:55
【问题描述】:

我使用适用于 Android 的 parse.com 后端。

我想注册一个新用户,然后在用户对象上设置一些数据字段。在注册后设置数据字段对我来说很重要,因为稍后我想使用 beforeSave 触发器启用自动 ACL 设置(目前没有激活任何触发器!)。

发生的情况如下:注册成功完成,然后我设置数据字段并调用currentUser.save。有时SaveCallback 根本没有被调用(既没有错误,也没有成功)。但是,大多数时候它被调用但用户的会话被删除。我可以在数据浏览器中轻松检查。另外,如果我在那之后尝试做任何事情,我会得到无效的会话异常。

代码如下:

final User user = getData();
user.setEmail(emailStr);
user.setUsername(emailStr);
user.setPassword(password);

user.signUpInBackground(new SignUpCallback() {
    @Override
    public void done(ParseException e) {
        if (e == null) {
            // this will be more complex data in the future
            User.getCurrentUser().put("testInt", 5);
            User.getCurrentUser().saveInBackground(new SaveCallback() {
                @Override
                public void done(ParseException e) {
                    if (e == null) {
                        // Hooray! But wait.. Oh no, the session is gone
                    } else {
                        // Oh no, something even worse happened
                    }
                }
            });
        } else {
            // signup failed
        }
    }
});

经过一天多的尝试和错误,我开始相信这实际上是 Parse 框架中的一个错误。 guide 明确指出:

应始终使用 signUpInBackground(或 signUp)方法创建新的 ParseUser。可以通过调用 save 来完成对用户的后续更新。

有人有类似的行为吗?

【问题讨论】:

    标签: android session parse-platform


    【解决方案1】:

    注册后不要调用保存,将您的数据放在前面,注册将保存它们。此外,您必须在注册后登录用户。成功调用 parseuser.logininbackground;这应该创建一个登录会话。 在登录前解析会在登录后创建一个用户会话后保持匿名会话。

    【讨论】:

    • 1.正如我所说,我真的想避免在注册时保存数据,因为我想使用仅在用户登录时才有效的触发器。 2. 你确定我必须在注册后调用登录吗?因为doc 声明:“这将在服务器上创建一个新的 ParseUser,并将会话持久保存在磁盘上,以便您可以使用ParseUser.getCurrentUser() 访问用户”。此外,如果我删除对 save 的调用并仅注册一个用户会话对象,则会按预期创建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 2017-02-09
    • 1970-01-01
    • 2012-05-31
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多