Firebase.auth.currentUser is never null



我需要接收"空";值,但它返回一些默认用户。

val auth = Firebase.auth
val currentUser = auth.currentUser
if (currentUser != null) {
val action = SignInFragmentDirections.actionSignInFragmentToTransactionsFragment(currentUser)
findNavController().navigate(action)
}

由于auth.currentUser从不返回null,所以我的应用程序总是转到另一个屏幕,不允许注册新用户。为什么会发生这种情况,以及在调用auth.сurrentUser时如何获得null

"不允许注册新用户">

在我看来,你试图通过使用Android SDK创建多个用户,但它并不是为此而构建的。登录后,您必须注销才能创建另一个用户,因为一个应用程序(至少一个Firebase项目(中只能登录一个用户。

如果您想创建多个帐户,则可以直接从Firebase控制台创建。但是,如果你的应用程序是由管理员或特权用户使用的,他们可以创建新帐户,而你不想让他们访问Firebase控制台,那么你就必须使用云功能或你自己的服务器。

在那里,您可以使用Firebase Admin SDK创建新用户。一个简单的函数可能看起来像:

exports.createNewUser = functions.https.onCall((data, context) => {
return admin
.auth()
.createUser({
email: data.email
})
.then((userRecord) => {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully created new user:', userRecord.uid);
return userRecord.uid
})
.catch((error) => {
console.log('Error creating new user:', error);
});
});

你可以从你的应用程序中调用函数,如下所示:

private fun createUser(name: String, email: String): Task<String> {
// Create the arguments to the callable function.
val data = hashMapOf(
"name" to name,
"email" to email
)
return functions
.getHttpsCallable("createNewUser")
.call(data)
.continueWith { task ->
val result = task.result?.data as String
}
}

您可以在这里阅读更多关于可调用函数的信息。

请注意,我只是在云函数中运行了createuser方法,但理想情况下,您应该检查哪个用户正在调用该函数(context.auth有信息(,并确保只有授权用户才能使用该函数。

我想明白了——如果我登录了应用程序,没有调用auth.signOut方法——我只从Firebase控制台删除了该帐户,因此auth令牌在本地保存了一段时间,因此auth.currentUser返回非null。当我删除该应用程序(并稍后在应用程序中添加signOut逻辑(并重新安装时,一切正常。

最新更新