# #android #firebase #kotlin #firebase-authentication
Вопрос:
Мне нужно получить значение «null» из функции Firebase.auth.CurrentUser, но она возвращает пользователя по умолчанию.
val auth = Firebase.auth
val currentUser = auth.currentUser
if (currentUser != null) {
val action = SignInFragmentDirections.actionSignInFragmentToTransactionsFragment(currentUser)
findNavController().navigate(action)
}
Поскольку значение auth.currentUser
никогда не возвращает null, мое приложение всегда переходит на другой экран и не позволяет регистрировать нового пользователя.
Почему это происходит и как я могу получить значение null при вызове auth.сurrentUser
?
Комментарии:
1. Вам придется выйти из системы пользователя, чтобы сделать его пустым.
2. Я создал пользователя в Firebase, но после этого удалил его в консоли Firebase, но
auth.currentUser
возвращает ненулевое значение…3. Пожалуйста, не оставляйте комментариев о статусе вашего вопроса в заголовке в дальнейшем. Здесь, в переполнении стека, система отслеживает статус вопросов на основе ответов, которые она получает автоматически.
4. О, я этого не знал, спасибо за информацию.
Ответ №1:
Я понял это — если я вошел в приложение и не вызвал auth.signOut
метод — я удалил учетную запись только с консоли Firebase, по этой причине токен аутентификации некоторое время сохранялся локально и по этой причине auth.currentUser
возвращал значение, отличное от нуля. Когда я удалил приложение (и добавил логику выхода в свое приложение позже) и переустановил его, все работает правильно.
Ответ №2:
«Не позволяет зарегистрировать нового пользователя»
Мне кажется, вы пытаетесь создать несколько пользователей с помощью Android SDK, но он не создан для этого. Как только вы войдете в систему, вам придется выйти, чтобы создать другого пользователя, потому что только один пользователь может быть зарегистрирован в одном приложении (по крайней мере, в одном проекте Firebase).
Если вы хотите создать несколько учетных записей, вы можете сделать это непосредственно с консоли Firebase. Однако если ваше приложение предназначено для использования администраторами или привилегированными пользователями, которые могут создавать новые учетные записи, и вы не хотите предоставлять им доступ к консоли Firebase, вам придется использовать что-то вроде облачных функций или вашего собственного сервера.
Там вы можете использовать SDK администратора Firebase для создания новых пользователей. Простые функции могут выглядеть так:
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
}
}
Вы можете прочитать больше о вызываемых функциях здесь.
Обратите внимание, что я просто запустил метод создания пользователя в облачных функциях, но в идеале вы должны проверить, какой пользователь вызывает функцию ( context.auth
имеет информацию), и убедиться, что только авторизованный пользователь может использовать эту функцию.
Комментарии:
1. Спасибо вам за подробный ответ! Но я имел в виду, что значение
auth.currentUser
никогда не было нулевым, и по этой причине мой «Экран входа» не отображается, потомуif
что оператор истинен, а его тело переходит к другому действию 🙂