在通过 Firebase 身份验证创建用户后,将用户名传递到后端的这两者之间哪种方法更安全?
Posted
技术标签:
【中文标题】在通过 Firebase 身份验证创建用户后,将用户名传递到后端的这两者之间哪种方法更安全?【英文标题】:Which is the more secure method between these two for passing the username to the backend after creating the user via Firebase auth? 【发布时间】:2021-08-19 04:38:51 【问题描述】:使用auth.createUserWithEmailAndPassword
创建用户后,我需要在Cloud Firestore中创建相关文档。
选项 1:如果auth.createUserWithEmailAndPassword
任务成功,则从应用程序调用云函数并将用户名、UID 和电子邮件传递给它以创建相关文档。
if (user.isNotEmpty() && email.isNotEmpty() && password.isNotEmpty())
fs.authCreateUser(email, password)
.addOnCompleteListener() task ->
if (task.isSuccessful)
Log.e(tag, "createUserWithEmailAndPassword task was successful")
fs.CFcreateUser(user, email)
.addOnCompleteListener() task ->
if (task.isSuccessful)
Log.e(tag, "CFcreateUser task was successful")
val result = task.result!!["result"]
val message = task.result!!["message"]
//If result = 1, go to Groups Activity
//Else, delete the Firebase user so that the list of authenticated users matches the list of users in Firestore
if (result == "1")
val intent = Intent(this, ActivityGroups::class.java)
startActivity(intent)
finish()
else
else
Log.e(tag, "CFcreateUser task failed")
Log.e(tag, "CFcreateUser task: $task.exception.toString()")
else
Log.e(tag, "createUserWithEmailAndPassword task failed")
Log.e(tag, "createUserWithEmailAndPassword exception: $task.exception.toString()")
选项 2:如果 auth.createUserWithEmailAndPassword
任务成功,则使用 user!!.updateProfile
(from the docs) 更新用户的 displayName,然后以某种方式设置后台触发器以使用 displayname 作为用户名创建相关文档。
//After the auth.createUserWithEmailAndPassword task runs, run the code below
val user = Firebase.auth.currentUser
val profileUpdates = userProfileChangeRequest
displayName = "Jane Q. User"
photoUri = Uri.parse("https://example.com/jane-q-user/profile.jpg")
user!!.updateProfile(profileUpdates)
.addOnCompleteListener task ->
if (task.isSuccessful)
Log.d(TAG, "User profile updated.")
不确定哪个选项更安全,我是 android 开发新手。
【问题讨论】:
【参考方案1】:这两种方法哪个更安全?
向 Firebase 产品(如 Cloud Firestore、Firebase Realtime Database 或 Cloud Functions for Firebase)发出并且来自后端 SDK 的所有请求都将完全绕过安全规则。还要提一下,这还包括Firebase Admin SDK。安全规则仅适用于网络和移动客户端。另一方面,在使用客户端代码时,您可以使用Cloud Firestore Security Rules 或Firebase Realtime Database Security Rules 来保护您的应用。
话虽如此,在我看来,这与安全性无关,而是与效率有关。确实可以让客户端应用程序完成这项工作,但有一个缺点,因为您可以使用 Cloud Functions 更有效地完成这项工作。如果客户端应用程序可以完成这项工作,那么就数据使用和速度而言,您不必为数据计划支付费用。对于 Cloud Functions,一切都在内部完成。
因为您使用的是 Firebase 身份验证,所以您可以创建一个 Cloud Function 来简单地解决这个问题。所以你必须创建一个每次发生新事情时都会触发的函数。这里我说的是trigger of a function on user creation。
Cloud Storage triggers 也是如此。
【讨论】:
嗨!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑采纳(✔️)。我真的很感激。谢谢!以上是关于在通过 Firebase 身份验证创建用户后,将用户名传递到后端的这两者之间哪种方法更安全?的主要内容,如果未能解决你的问题,请参考以下文章
来自已经过身份验证的帐户的Firebase createUserWithEmailAndPassword()
如何在不关闭当前 Firebase 会话的情况下创建用户身份验证 [重复]