如何将电子邮件地址添加到 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 中添加带有电子邮件和密码的用户名?
成功注册电子邮件和密码后,我可以自动将电子邮件添加到实时数据库吗?