Почему Firebase Console не создает анонимного пользователя при анонимном входе в Android onCreate? - PullRequest
0 голосов
/ 19 сентября 2018

Прежде всего, я реализовал анонимный вход в систему аутентификации Firebase без проблем, когда есть кнопка входа.Но когда я помещаю код входа в onCreate() для имитации автоматического входа, он показывает анонимный успех входа, и я могу читать и писать, но консоль не создает пользователя.Почему это?Вот мой код:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val config = AndroidApplicationConfiguration()
    initialize(Main(this), config)

    mAuth = FirebaseAuth.getInstance()

    mAuth.signInAnonymously()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInAnonymously:success")
                    Toast.makeText(this, "Authentication succeeded.",
                            Toast.LENGTH_SHORT).show()

                    /* Assign 'user' */
                    user = mAuth.currentUser

                    // Write a message to the database
                    val database = FirebaseDatabase.getInstance()
                    val uidPath: String? = user?.uid

                    val uidRef = database.getReference("users")
                    val nameRef = database.getReference("users/$uidPath/name")
                    val emailRef = database.getReference("users/$uidPath/email")
                    val authProviderRef = database.getReference("users/$uidPath/authProvider")

                    uidRef.setValue("${user?.uid}")
                    nameRef.setValue("${user?.displayName}")
                    emailRef.setValue("${user?.email}")
                    user?.providerData?.forEach {
                        authProviderRef.setValue(it.providerId)
                    }
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInAnonymously:failure", task.exception)
                    Toast.makeText(this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                }

            }
}

Auth

database

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Причина в том, что до того, как я попробовал этот автоматический вход, пользователь (firebaseAuth.currentUser) уже существует.Поэтому, когда я выхожу явно, используя FirebaseAuth.getInstance.signOut (), таким образом, пользователь становится нулевым, и firebase создаст пользователя.

0 голосов
/ 20 сентября 2018

Тот факт, что вы не записываете email и name в своей базе данных, не является проблемой, поскольку при попытке аутентификации анонимного пользователя объект FirebaseUser не содержит значений дляэти свойства.Так вот почему эти свойства пусты в вашей базе данных.Если вы хотите, чтобы они были заполнены, вам следует связать анонимную учетную запись с реальной учетной записью, как объяснено здесь .

Причина, по которой вы не добавили пользователя в консоль Firebase, заключается в том, что вы нене передаете addOnCompleteListener методу метода действие и объект OnCompleteListener, который вы только передаете this, что неверно.Чтобы решить эту проблему, используйте следующий код:

firebaseAuth!!.signInAnonymously()
        .addOnCompleteListener(this, OnCompleteListener<AuthResult> { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "signInAnonymously:success")
                Toast.makeText(this, "Authentication succeeded.",
                        Toast.LENGTH_SHORT).show()

                /* Assign 'user' */
                user = firebaseAuth!!.currentUser

                // Write a message to the database
                val database = FirebaseDatabase.getInstance()
                val uidPath: String? = user?.uid

                val uidRef = database.getReference("users")
                val nameRef = database.getReference("users/$uidPath/name")
                val emailRef = database.getReference("users/$uidPath/email")
                val authProviderRef = database.getReference("users/$uidPath/authProvider")

                uidRef.setValue("${user?.uid}")
                nameRef.setValue("${user?.displayName}")
                emailRef.setValue("${user?.email}")
                user?.providerData?.forEach {
                    authProviderRef.setValue(it.providerId)
                }
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInAnonymously:failure", task.exception)
                Toast.makeText(this, "Authentication failed.",
                        Toast.LENGTH_SHORT).show()
            }
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...