如何将电子邮件地址添加到 firebase kotlin? [复制]

Posted

技术标签:

【中文标题】如何将电子邮件地址添加到 firebase kotlin? [复制]【英文标题】:How to add email address to firebase kotlin? [duplicate] 【发布时间】:2021-11-18 09:30:09 【问题描述】:

我无法将带有 @.com 的电子邮件地址添加到 Firebase。应用程序关闭。这是我使用的代码。

 val FullName = FullName.getText().toString()
                    val PhoneNo = PhoneNo.getText().toString().toInt()
                    val Age = Age.getText().toString().toInt()
                    val EmailAddress = EmailAddress.getText().toString()
                    val BankAccNo = BankAccNo.getText().toString()
                    val PasswordRegister = PasswordRegister.getText().toString()

                    val User = User(FullName,PhoneNo,Age,EmailAddress, BankAccNo,PasswordRegister)
                    myRef.child(EmailAddress).setValue(User)

其他人工作正常。 这是User

的数据类
data class User(val FullName: String, val PhoneNo:Int,
                val Age:Int, val EmailAddress:String,  val BankAccNo:String, val PasswordRegister:String)

已编辑。 dataSnapshot.child(decodeUserEmail).child("passwordRegister").getValue(String::class.java) 行中出现错误

 fun decodeUserEmail(email: String) = email.replace(",", ".")
    
    private fun isUser() 
        val  userEnteredEmail = email.getText().toString().trim()
        val  userEnteredPassword = password1.getText().toString().trim()
        
        val decodeUserEmail = decodeUserEmail(userEnteredEmail)

        val reference = FirebaseDatabase.getInstance().getReference("User")

        val checkUser: Query = reference.orderByChild("emailAddress").equalTo(decodeUserEmail)

        checkUser.addListenerForSingleValueEvent(object : ValueEventListener 
            override fun onDataChange(@NonNull dataSnapshot: DataSnapshot) 
                if (dataSnapshot.exists()) 
                    val passwordFromDB =
                        dataSnapshot.child(decodeUserEmail).child("passwordRegister").getValue(String::class.java)
                    if (passwordFromDB.equals(userEnteredPassword)) 
                        startActivity(Intent(this@MainActivity, Home::class.java))

                        val intent = Intent(baseContext, Home::class.java)
                        intent.putExtra("EXTRA_SESSION_ID", decodeUserEmail)
                        startActivity(intent)

                     else 

                    

                 else
                

            
            override fun onCancelled(@NonNull databaseError: DatabaseError) 
        )

【问题讨论】:

请分享堆栈跟踪。以目前的信息,我们帮不了你太多。 @s_o_m_m_y_e_e 我更新了问题 【参考方案1】:

正如你的错误所说:

Firebase 数据库路径不得包含“.”、“#”、“$”、“[”或“]”`

这意味着 Firebase 不允许您在键名中使用这些符号。因此,我建议您使用 UID,而不是使用电子邮件地址作为用户节点的密钥:

val user = FirebaseAuth.getInstance().currentUser
currentUser?.apply 
    myRef.child(uid).setValue(User)

这种方法总是更好,因为 UID 总是相同的。用户可以更改电子邮件地址。

如果您不想使用这种方法,那么您可以考虑像这样对电子邮件地址进行编码:

name@email.com -> name@email,com

为此,我建议您使用以下方法:

fun encodeUserEmail(userEmail: String) = userEmail.replace(".", ",")

fun decodeUserEmail(userEmail: String) = userEmail.replace(",", ".")

编辑:

val encodedEmail = encodeUserEmail(EmailAddress)
myRef.child(encodedEmail).setValue(User)

【讨论】:

请查看我更新的答案。有用吗? Yaaa 它有效。非常感谢 是的,确实如此。你应该以同样的方式来做。 如果要读取name@email,com所在的节点,需要在路径中添加编码后的邮件,而不是在查询中。 .equalTo(decodeUserEmail) 很可能不满足该条件。 现在可以使用了。非常感谢您的帮助。

以上是关于如何将电子邮件地址添加到 firebase kotlin? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firebase 中添加带有电子邮件和密码的用户名?

成功注册电子邮件和密码后,我可以自动将电子邮件添加到实时数据库吗?

如何为 Firebase (Kotlin) 创建自定义身份验证

firebase:如何链接电子邮件验证和密码

如何在文档字段而不是集合字段中向Firebase添加数据?

将用户从 MongoDB 转移到 firebase