Firebase用户身份验证无法正常工作

发布于 2025-02-07 17:44:25 字数 4548 浏览 1 评论 0原文

我对此仍然很新,所以对于

我试图学习如何使用firebase的电子邮件和密码来制作登录系统的任何小错误表示歉意,但似乎无法按预期工作。检查电子邮件是否为空的代码,不正确的格式,密码长度不匹配参数也无法正常工作。我在运行前仔细检查代码,但没有得到任何结果。

我已经将此应用程序连接到firebase,并添加firebase身份验证sdk

单击“ login noreferrer' /a>

loginpage.kt

class loginPage : AppCompatActivity() {

lateinit var binding : LoginPageBinding
lateinit var auth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
    binding = LoginPageBinding.inflate(layoutInflater)
    super.onCreate(savedInstanceState)
    window.setFlags(
        WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    setContentView(R.layout.login_page)

    auth = FirebaseAuth.getInstance()

    login_back_button.setOnClickListener{
        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
    }
    binding.loginButton.setOnClickListener{
        val email = binding.emailField.text.toString()
        val password = binding.passwordField.text.toString()

        if (email.isEmpty()){
            binding.emailField.error = "Email cannot be empty"
            binding.emailField.requestFocus()
            return@setOnClickListener
        }

        if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
            binding.emailField.error = "Email not valid"
            binding.emailField.requestFocus()
            return@setOnClickListener
        }

        if (password.length > 6){
            binding.passwordField.error = "Minimal password length is 6"
            binding.passwordField.requestFocus()
            return@setOnClickListener
        }
        RegisterFirebase(email,password)
    }
}

private fun RegisterFirebase(email: String, password: String) {
    auth.createUserWithEmailAndPassword(email,password)
        .addOnCompleteListener(this){
            if (it.isSuccessful){
                Toast.makeText(this, "Register Successful", Toast.LENGTH_SHORT).show()
                val intent = Intent(this, homePage::class.java)
                startActivity(intent)
            } else {
                Toast.makeText(this, "${it.exception?.message}", Toast.LENGTH_SHORT).show()
            }
        }
}

}

homepage.kt

class homePage : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    window.setFlags(
        WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    setContentView(R.layout.home_page)
}

}

dectext用于输入电子邮件(在login_page.xml中)

<EditText
    android:id="@+id/email_field"
    android:layout_width="272dp"
    android:layout_height="31dp"
    android:background="@drawable/email_password_filler"
    android:hint="@string/enter_your_email"
    android:paddingStart="20sp"
    android:paddingTop="5sp"
    android:paddingBottom="5sp"
    android:textSize="13sp"
    android:maxLines="1"
    android:lines="1"
    android:singleLine="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.504"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.126"
    tools:ignore="Autofill,RtlSymmetry,TextFields" />

输入密码(在login_page.xml)

<EditText
    android:id="@+id/password_field"
    android:layout_width="272dp"
    android:layout_height="31dp"
    android:background="@drawable/email_password_filler"
    android:hint="@string/enter_your_password"
    android:paddingStart="20sp"
    android:paddingTop="5sp"
    android:paddingBottom="5sp"
    android:textSize="13sp"
    android:maxLines="1"
    android:lines="1"
    android:singleLine="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.504"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.208"
    tools:ignore="Autofill,RtlSymmetry,TextFields" />

I'm still very new at this so apologize for any minor mistake I made

I'm trying to learn how to make a login system with email and password using Firebase but it doesn't seem to work as intended. The code to check whether the email is empty, incorrect format, password length not matching the parameter is not working too. I double check my code before running and I'm not getting any result.

I already connect this app to Firebase and add Firebase Authentication SDK

Clicking the login button will not make any error as intended

loginPage.kt

class loginPage : AppCompatActivity() {

lateinit var binding : LoginPageBinding
lateinit var auth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
    binding = LoginPageBinding.inflate(layoutInflater)
    super.onCreate(savedInstanceState)
    window.setFlags(
        WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    setContentView(R.layout.login_page)

    auth = FirebaseAuth.getInstance()

    login_back_button.setOnClickListener{
        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
    }
    binding.loginButton.setOnClickListener{
        val email = binding.emailField.text.toString()
        val password = binding.passwordField.text.toString()

        if (email.isEmpty()){
            binding.emailField.error = "Email cannot be empty"
            binding.emailField.requestFocus()
            return@setOnClickListener
        }

        if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
            binding.emailField.error = "Email not valid"
            binding.emailField.requestFocus()
            return@setOnClickListener
        }

        if (password.length > 6){
            binding.passwordField.error = "Minimal password length is 6"
            binding.passwordField.requestFocus()
            return@setOnClickListener
        }
        RegisterFirebase(email,password)
    }
}

private fun RegisterFirebase(email: String, password: String) {
    auth.createUserWithEmailAndPassword(email,password)
        .addOnCompleteListener(this){
            if (it.isSuccessful){
                Toast.makeText(this, "Register Successful", Toast.LENGTH_SHORT).show()
                val intent = Intent(this, homePage::class.java)
                startActivity(intent)
            } else {
                Toast.makeText(this, "${it.exception?.message}", Toast.LENGTH_SHORT).show()
            }
        }
}

}

homePage.kt

class homePage : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    window.setFlags(
        WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    setContentView(R.layout.home_page)
}

}

EditText for entering email (in login_page.xml)

<EditText
    android:id="@+id/email_field"
    android:layout_width="272dp"
    android:layout_height="31dp"
    android:background="@drawable/email_password_filler"
    android:hint="@string/enter_your_email"
    android:paddingStart="20sp"
    android:paddingTop="5sp"
    android:paddingBottom="5sp"
    android:textSize="13sp"
    android:maxLines="1"
    android:lines="1"
    android:singleLine="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.504"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.126"
    tools:ignore="Autofill,RtlSymmetry,TextFields" />

For entering password (in login_page.xml)

<EditText
    android:id="@+id/password_field"
    android:layout_width="272dp"
    android:layout_height="31dp"
    android:background="@drawable/email_password_filler"
    android:hint="@string/enter_your_password"
    android:paddingStart="20sp"
    android:paddingTop="5sp"
    android:paddingBottom="5sp"
    android:textSize="13sp"
    android:maxLines="1"
    android:lines="1"
    android:singleLine="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.504"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.208"
    tools:ignore="Autofill,RtlSymmetry,TextFields" />

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葬﹪忆之殇 2025-02-14 17:44:25

密码应始终大于或等于6,在您的情况下,情况相反。这样修复它:

if (password.length < 6) {
    binding.passwordField.error = "Minimal password length is 6"
    binding.passwordField.requestFocus()
    return@setOnClickListener
}

login_back_button缺少binding引用以及如果是返回按钮,则应只使用完成才能返回以前活动而不是再次创建新实例。像这样:

binding.loginBackButton.setOnClickListener { finish() }

更新:

问题是您使用binding,而不是在setContentView中传递它。这样修复它:

setContentView(binding.root)

The password should always be greater than or equal to 6 and in your case, the condition is opposite. Fix it like this:

if (password.length < 6) {
    binding.passwordField.error = "Minimal password length is 6"
    binding.passwordField.requestFocus()
    return@setOnClickListener
}

login_back_button is missing binding reference as well as if it's a back button then you should just use finish to go back to previous activity rather than creating new instance again. Like this:

binding.loginBackButton.setOnClickListener { finish() }

Update:

The issue is that you are using binding but not passing it in setContentView. Fix it like this:

setContentView(binding.root)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文