Firebase isEmailVerify не работает в Kotlin - PullRequest
1 голос
/ 06 января 2020

ПРИМЕЧАНИЕ : я смог понять это. Нет необходимости менять правила в Firebase. Смотрите код ниже.

ОРИГИНАЛЬНЫЙ ПОСТ У меня есть приложение IOS, и я решил создать версию для Android / Kotlin, и мне трудно с Firebase / isEmailVerify. Я могу зарегистрировать нового пользователя и отправить электронное письмо для проверки, но, если я не проверю, я все еще могу войти. Я новичок в Kotlin. Любая помощь очень ценится.

ОБНОВЛЕННЫЙ КОД

class LoginActivity : AppCompatActivity() {

lateinit var auth: FirebaseAuth
private var emailVerifier: Boolean = true

private val emailVerificationAlert = { _: DialogInterface, _: Int ->
    Toast.makeText(this.applicationContext, android.R.string.yes, Toast.LENGTH_SHORT).show()
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_login)
    auth = FirebaseAuth.getInstance()
}

private fun verifyEmail() {
    val user = FirebaseAuth.getInstance().currentUser
    if (user != null) {
        emailVerifier = user.isEmailVerified()
    }
    if (emailVerifier) {
        finish()
    } else {
        userDidNotVerify()
        auth.signOut()
    }
}

fun loginBtnClicked(view: View) {
    val email = loginEmailTxt.text.toString()
    val password = loginPasswordTxt.text.toString()

    auth.signInWithEmailAndPassword(email, password)
        .addOnSuccessListener { exception ->
            println("USER LOGGED IN")
            verifyEmail()
        }
        .addOnFailureListener { exception ->
            Log.e("Exception", "Could not sign in user - ${exception.localizedMessage}") 
    }
}

private fun userDidNotVerify() {
    val builder = android.app.AlertDialog.Builder(this)
    with(builder) {
        this.setTitle("Confirm your email address.")
        this.setMessage("A confirmation email has been sent to" + " " + (loginEmailTxt.text) + " " +
                    "." + " " + "Click on the confirmation link to activate your account")
        this.setPositiveButton("OK", DialogInterface.OnClickListener(function = emailVerificationAlert))
        this.show()
    }
}

fun loginCreateClicked(view: View) {
    val createIntent = Intent(this, CreateUserActivity::class.java)
    startActivity(createIntent)
}

}

1 Ответ

0 голосов
/ 06 января 2020

Ожидается, что пользователь все еще сможет выполнить вход, прежде чем электронная почта будет подтверждена. Это позволяет вашему приложению разрешить пользователю запрашивать отправку другого подтверждающего электронного письма в случае, если что-то случилось с первым.

Если вы хотите ограничить действия пользователя до подтверждения электронного письма вы можете проверить isEmailVerfied () на объекте UserInfo, и вы можете использовать auth.token.email_verified в правилах безопасности, чтобы ограничить их доступ к базам данных и хранилищу, также предоставляемым Firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...