android - Firebase isEmailVerify 在 Kotlin 中不起作用
问题描述
注意:我能够弄清楚这一点。无需更改 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)
}
}
解决方案
预计用户仍然可以在电子邮件得到验证之前登录。这为您的应用程序提供了一种方法,允许用户请求发送另一封验证电子邮件,以防第一封邮件发生问题。
如果您想在验证电子邮件之前限制用户可以执行的操作,可以检查UserInfo 对象上的isEmailVerfied(),并且可以使用安全规则中的auth.token.email_verified来限制他们对数据库和存储的访问也提供由火力基地。
推荐阅读
- sqlite - SQLite 通过列选择查询 foreach
- google-cloud-logging - Google Cloud CDN 未记录无服务器 Negs
- android - 我正在尝试将多个图像从 firebase 显示到 viewpager
- github - 如何在 github 上轻松查看带有 ipynb 扩展名的文件
- docker - Docker、微服务和网络
- java - 运行spring批处理作业时无法反序列化执行上下文异常
- javascript - Angular 8对象数组上的多个过滤器
- python - 多项式回归:ValueError:形状(88,1)和(3,1)未对齐:1(dim 1)!= 3(dim 0)
- python - pandas 从 url 读取 .csv,起始行的标题较少
- python-3.x - Keras版本问题有什么神奇的命令吗?