Firebase์ ๊ด๋ จ๋ ํจ์๋ฅผ ์ ์ด์ฉํ๋ฉด ๋ - ๋ฑ ! ํ๊ณ ์์ฑ๋๋๊น ๊ธฐ๋ถ ์ข๋ค..
ํ์๊ฐ์ ์ ์ ๋ ฅํ๋ ์ด๋ฉ์ผ๋ก ์ค์ ์ธ์ฆ ์ด๋ฉ์ผ์ด ๋ฐ์ก๋๋๋ก ๊ตฌํํ๊ณ ์ ํ๋ค.
ํ์๊ฐ์ ์ ๊ฐ์ ์ด๋ฉ์ผ๋ก ์ธ์ฆ ์ด๋ฉ์ผ์ ์ ์กํด ์ค์ ์ด๋ฉ์ผ์ ํตํด ๊ฐ์ ์ด ๊ฐ๋ฅํ๋๋ก ์์ ํด์ค๋ค.
// ์ธ์ฆ ์ด๋ฉ์ผ ๋ฐ์ก
private fun sendVerifyEmail() {
val user = auth.currentUser
user?.sendEmailVerification()
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
toastMessage("ํด๋น ์ด๋ฉ์ผ๋ก ํ์ธ ๋ฉ์ผ์ด ์ ์ก๋์์ต๋๋ค. ์ด๋ฉ์ผ์ ํ์ธํ์ธ์.")
finish()
} else {
toastMessage("์ค๋ฅ..์ด๋ฉ์ผ ์ ์ก์ ์คํจํ์ต๋๋ค.")
}
}
}
๊ฐ์ ์ด๋ฉ์ผ๋ก ํ์๊ฐ์
์ ํ๋ฉด ์ฌ์ฉ์ ๋ฟ๋ง ์๋๋ผ ๊ด๋ฆฌ์ ๋ํ ๊ด๋ฆฌํ๊ธฐ๊ฐ ํ๋ค์ด์ง๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๊ฐ์
๋ ์ด๋ฉ์ผ๋ก๋ ์ค๋ณต์ผ๋ก ๊ฐ์
์ด ๋ถ๊ฐ๋ฅํ๋๋ก fetchSignInMethodsForEmail
ํจ์๋ฅผ ์ด์ฉํด์ Firebase
์ ๋ฑ๋ก๋ ์ด๋ฉ์ผ์ด ์๋์ง ํ์ธํ๊ณ ์์ ๊ฒฝ์ฐ์๋ง ํ์๊ฐ์
์ด ์งํ๋๋๋ก ์ฝ๋๋ฅผ ๊ตฌํํด์ค๋ค.
// ์ค๋ณต ์ด๋ฉ์ผ์ด ์๋์ง ํ์ธํ๊ธฐ
private fun checkDuplicateEmail(email: String) {
auth.fetchSignInMethodsForEmail(email)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val signInMethod = task.result?.signInMethods
// ์ด๋ฉ์ผ์ด ์ค๋ณต๋์ง ์์ ๊ฒฝ์ฐ
if (signInMethod.isNullOrEmpty()) {
registerUser(email, resultpw)
} else {
toastMessage("์ด๋ฏธ ๊ฐ์
๋ ์ด๋ฉ์ผ ์ฃผ์์
๋๋ค.")
}
}
}
}
๋ฉ์ผ ์ธ์ฆ์ด ์๋ ์ด๋ฉ์ผ์ด ๋ก๊ทธ์ธ์ด ๋๋ค๋ฉด, ์ด๋ฉ์ผ์ ๊ตณ์ด ์ธ์ฆํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ์ด ๋ถ๊ฐ๋ฅ ํ๋๋ก ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค. Firebase์ ๋ฑ๋ก๋ ์ ์ ์ ์ ๋ณด๊ฐ ์กด์ฌํ๋ฉฐ, ์ด๋ฉ์ผ ์ธ์ฆ์ด ๋์ด์๋ค๋ฉด ํ ํ๋ฉด์ผ๋ก ๋์๊ฐ๋ฉด ๋๋ค.
์ฌ๊ธฐ์
isEmailVerified
๋ฅผ ์ง์ํด์ค๋ค๋ ์ ์ด ๊ต์ฅํ ๊ฐํธํ !!
auth.signInWithEmailAndPassword(email, pw)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
// ๋ก๊ทธ์ธ ์ฑ๊ณต ์
val user = auth.currentUser
// ์ฌ์ฉ์๊ฐ ๋ฑ๋ก๋์ด ์์ผ๋ฉฐ, ์ด๋ฉ์ผ์ด ์ธ์ฆ๋ ๊ฒฝ์ฐ
if(user != null && user.isEmailVerified) {
val signInIntent = Intent(this, MainActivity::class.java)
toastMessage("๋ก๊ทธ์ธ ์ฑ๊ณต !")
startActivity(signInIntent)
}
// ์ด๋ฉ์ผ ์ธ์ฆ ์ํ์ ๊ฒฝ์ฐ
else {
toastMessage("์ด๋ฉ์ผ ํ์ธ ํ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.")
}
} else {
// ๋ก๊ทธ์ธ ์คํจ ์
toastMessage("์์ด๋ ๋๋ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ต๋๋ค.")
}
}
๋ ์ด์์์ ๋ค์ figma๋ฅผ ์ฐธ๊ณ ํด์ Activity๋ก ๊ตฌํํด์ค๋ค.
๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ TextView
๋ฅผ ๋๋ ์ ๋ ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ layout์ด ๋์ค๋๋ก ์ค์ ํด์ฃผ๊ณ , ๋ค์ด์ผ๋ก๊ทธ์์ ์ด๋ฉ์ผ์ ์
๋ ฅํ๊ณ ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ Button์ ๋๋ฅด๋ฉด ์
๋ ฅํ ์ด๋ฉ์ผ๋ก ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๋ฉ์ผ์ด ๊ฐ๊ฒ ๋๋๋ก ๊ตฌํํด์ค๋ค.
override fun onCreate(savedInstanceState: Bundle?) {
...
// ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ๋ฒํผ ํด๋ฆญ ์
binding.findpwBtnFind.setOnClickListener {
val email = binding.findpwEtEmail.text.toString()
// ์ด๋ฉ์ผ์ด ๋น์ด์์ง ์์ ๊ฒฝ์ฐ, ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ด๋ฉ์ผ ์ ์ก
if (email.isNotEmpty()) {
resetPW(email)
} else {
toastMessage("์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.")
}
}
// ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๊ธฐ๋ฅ
private fun resetPW(email: String) {
// ํด๋น ์ด๋ฉ์ผ๋ก ์ฌ์ค์ ์ด๋ฉ์ผ ์ ์ก
auth.sendPasswordResetEmail(email)
.addOnCompleteListener { resetTask ->
if (resetTask.isSuccessful) {
val resultIntent = Intent(this, FindpwResultActivity::class.java)
startActivity(resultIntent)
} else {
toastMessage("์ด๋ฉ์ผ ์ ์ก์ ์คํจํ์ต๋๋ค. ๊ฐ์
ํ์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ํ์ธํด์ฃผ์ธ์.")
}
}
}
์ฌ์ค์ ๋ฉ์ผ์ ๋ณด๋ด๊ธฐ ์ํ sendPasswordResetEmail
ํจ์๋ฅผ ์ด์ฉํด์ฃผ๋ฉด ๋๋ค. sendPasswordResetEmail
์ ๋จ์ด ๊ทธ๋๋ก ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ด๋ฉ์ผ์ ๋ณด๋ด๋ ๊ธฐ๋ฅ์ด๋ค.
๊ณต์๋ฌธ์ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ด๋ฉ์ผ ๋ณด๋ด๊ธฐ ๋ถ๋ถ์ธ ์๋ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
val emailAddress = "user@example.com" Firebase.auth.sendPasswordResetEmail(emailAddress) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }