You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Kotlin实现Firebase认证失效问题求助

Firebase认证数据未在控制台显示的问题排查与修复

核心问题与修复点

你的代码存在几处关键问题,直接导致无法在Firebase控制台看到预期数据:

1. 语法转义错误

代码中的&&和->是HTML转义字符,实际编译会报错,需替换为原生Kotlin语法:

  • && → &&
  • -> → ->

2. 页面跳转逻辑错误

haveAccount按钮点击后错误跳转到当前的RegisterActivity,应改为跳转到登录页面(如LoginActivity),否则用户无法切换到登录流程。

3. 未将用户数据写入Firebase数据库

你仅完成了Firebase认证用户的创建,但未将用户信息(邮箱、UID等)写入Realtime Database,因此数据库控制台无数据。同时声明的databaseReference未初始化也未使用。

4. 提示文案混淆

注册成功的Toast提示写成了"Login Successful",易造成用户误解,需改为"Register Successful"。

修复后的完整代码

package com.example.campusversion

import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase
import com.example.campusversion.databinding.ActivityRegisterBinding

class RegisterActivity : AppCompatActivity() {

    private lateinit var auth: FirebaseAuth
    private lateinit var databaseReference: DatabaseReference
    private lateinit var binding: ActivityRegisterBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityRegisterBinding.inflate(layoutInflater)
        setContentView(binding.root)

        auth = FirebaseAuth.getInstance()
        // 初始化数据库引用,指向"users"节点
        databaseReference = FirebaseDatabase.getInstance().getReference("users")

        binding.btnRegister.setOnClickListener {
            val email = binding.etEmail.text.toString().trim()
            val password = binding.etPass.text.toString().trim()

            if (email.isNotEmpty() && password.isNotEmpty()) {
                auth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(this) { task ->
                        if (task.isSuccessful) {
                            // 获取当前创建的用户UID
                            val userId = auth.currentUser?.uid
                            userId?.let { uid ->
                                // 将用户邮箱和UID写入数据库
                                val userMap = mapOf("email" to email, "uid" to uid)
                                databaseReference.child(uid).setValue(userMap)
                                    .addOnSuccessListener {
                                        Toast.makeText(this, "Register Successful", Toast.LENGTH_SHORT).show()
                                        val intent = Intent(this, HomeActivity::class.java)
                                        startActivity(intent)
                                        finish()
                                    }
                                    .addOnFailureListener { e ->
                                        Toast.makeText(this, "Failed to save user data: ${e.message}", Toast.LENGTH_SHORT).show()
                                    }
                            }
                        } else {
                            // 显示具体错误信息,方便排查
                            Toast.makeText(this, "Register Unsuccessful: ${task.exception?.message}", Toast.LENGTH_SHORT).show()
                        }
                    }
            } else {
                Toast.makeText(this, "Please enter email and password", Toast.LENGTH_SHORT).show()
            }
        }

        binding.haveAccount.setOnClickListener {
            // 跳转到登录页面,替换为你的LoginActivity类名
            startActivity(Intent(this, LoginActivity::class.java))
            finish()
        }
    }
}

额外排查步骤

  • 检查Authentication面板:若用户创建成功,Firebase控制台的Authentication面板应显示对应邮箱用户。若看不到,确认google-services.json文件正确放置,且AndroidManifest.xml已添加网络权限。
  • 检查数据库规则:开发阶段可临时设置规则为{ "rules": { ".read": true, ".write": true } }(上线后需修改为安全规则),确保能正常写入数据。
  • 查看Logcat日志:过滤Firebase相关日志,排查认证或数据库操作的错误信息。

内容的提问来源于stack exchange,提问作者João Lourenço Gumane Junior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:10:26