【问题标题】:Why object is not inserted into firebase database when sendEmailVerification() method (method of Firebase Auth) is called?为什么调用 sendEmailVerification() 方法(Firebase Auth 的方法)时没有将对象插入到 firebase 数据库中?
【发布时间】:2018-09-15 17:26:12
【问题描述】:

我正在尝试在调用 sendEmailVerification() 方法时将对象插入到 firebase 数据库中。

注意:我在创建新用户帐户后调用了 sendEmailVerification()。

RegistrationModel 是我的模型类。

sendEmailVerification 代码:

final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.sendEmailVerification()
   .addOnCompleteListener(new OnCompleteListener<Void>() {
          @Override
          public void onComplete(@NonNull Task<Void> task) {
         if (task.isSuccessful()) {
                            // email sent
                            String userId = savePref.getUid();
                            registrationModel = new RegistrationModel();
                            registrationModel.setStatus(ONLINE_STATUS);
                            registrationModel.setName("");
                            registrationModel.setPassword(passwordFromRegister);
                            registrationModel.setKey("");
                            registrationModel.setEmailId(user.getEmail());
                            registrationModel.setGenerated_links("");
                            registrationModel.setNO_OF_GENERATED_LINK(NO_OF_GENERATED_LINK);
                            registrationModel.setNO_OF_CHATING_PERMISSION(NO_OF_CHATING_PERMISSION);

                        FirebaseDatabase.getInstance().getReference().child("RegistrationModel")
                                    .child(userId).setValue(registrationModel);

                        }

                    }
                });

我搜索了很多,但没有找到任何解决方案!

注意我收到此警告setValue at /RegistrationModel/KxvrHcEQXdRnV45XqZecUDtUX8c2 failed: DatabaseError: Permission denied

【问题讨论】:

  • 你确定userId被填了吗?
  • 另外,我们可以看看您的 RegistrationModel 吗?
  • 将运行您的代码,1 秒
  • 我运行了一个类似的代码,它正在保存到数据库中,问题不在于 firebase。我建议您在 setValue 方法中添加一个完成侦听器并检查它是否返回 DatabaseError
  • 检查您的 logcat 输出是否有来自数据库的警告和错误。例如:用户是否对您尝试写入的位置具有权限?

标签: android firebase firebase-realtime-database firebase-authentication firebase-cloud-messaging


【解决方案1】:

如果您查看documentation for sendEmailVerification,它会说:

public Task<Void> sendEmailVerification (ActionCodeSettings actionCodeSettings)

为用户启动电子邮件验证。接受 ActionCodeSettings 以允许在电子邮件中链接回您的应用。

返回一个 Task 跟踪发送操作的完成情况。

任务完成时,电子邮件已发送。这并不意味着用户已经点击验证他们的电子邮件地址,也不意味着他们已经通过身份验证。

我不太确定它发生在哪里,但您的身份验证状态似乎在以下某处丢失:

final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

FirebaseDatabase.getInstance().getReference().child("RegistrationModel")
                                .child(userId).setValue(registrationModel);

【讨论】:

  • 非常感谢您的支持!那我怎么能做到这一点,我从过去 24 小时开始一直在搜索。
  • 当我使用这个规则时它起作用了 -> { "rules": { ".read": "auth != null", ".write": "auth == null" } }跨度>
  • 但每当我尝试在其他地方设置值时,我都会收到警告“setValue at /RegistrationModel/W41yOKmeSsUSYImak3Cgxh0llow1/status failed: DatabaseError: Permission denied”,到底是什么问题?
  • 根据您显示的规则,我可以解释“权限被拒绝”的唯一方法是您在执行该操作时未登录。
猜你喜欢
  • 2021-01-25
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 2016-09-25
相关资源
最近更新 更多