UI

editText로 작성한 이메일에 비밀번호를 변경할 수 있는 코드가 제공된다.
비밀번호 찾기 구현
FindpwActivity.kt
private fun resetPw() {
auth?.sendPasswordResetEmail(emailAddress.toString())
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
Toast.makeText(this,"비밀번호 변경 메일을 전송했습니다.", Toast.LENGTH_LONG).show()
moveToLoginPage()
}else if(!loginActivity.isEmail(emailAddress.toString())){
Toast.makeText(this,"이메일 형식으로 입력해주세요.", Toast.LENGTH_LONG).show()
}else if(task.exception?.message.equals("There is no user record corresponding to this identifier. The user may have been deleted.")) {
Toast.makeText(this, "존재하지 않는 이메일입니다.", Toast.LENGTH_LONG).show()
}else{
Log.d("---------------------------------------WARN: ", task.exception?.message.toString())
}
}
}
FirebaseAuth의 sendPasswordResetEmail 기능을 통해 비밀번호를 변경할 수 있는 메일을 전송하고 메인 화면으로 돌아간다. 만약, 올바른 이메일이 입력되지 않았다면 경고 메시지를 띄운다.
처음 비밀번호 찾기 기능을 구현할 때, 입력한 이메일과 일치하는 계정을 찾은 뒤 사용자가 비밀번호를 직접 editText에 입력하여 변경할 수 있도록 구현하려고 했다. 이에 firebase에 저장되어 있는 user의 email에 접근하여 데이터를 가져오려고 했지만 구현 중간에 sendPasswordResetEmail 기능을 사용하면 비밀번호 변경 과정을 직접 작성하지 않아도 알아서 진행된다는 것을 알았고 위와 같은 코드로 비밀번호 찾기 기능을 구현하게 되었다.
<전체 코드>
class FindpwActivity : AppCompatActivity(){
var auth : FirebaseAuth? = null
var emailAddress : String? = null
lateinit var loginActivity : LoginActivity
lateinit var signupActivity: SignupActivity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_findpw)
auth = FirebaseAuth.getInstance()
loginActivity = LoginActivity()
signupActivity = SignupActivity()
findpw_btn.setOnClickListener {
emailAddress = findpw_email_et.text.toString()
resetPw()
}
}
private fun resetPw() {
auth?.sendPasswordResetEmail(emailAddress.toString())
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
Toast.makeText(this,"비밀번호 변경 메일을 전송했습니다.", Toast.LENGTH_LONG).show()
moveToLoginPage()
}else if(!loginActivity.isEmail(emailAddress.toString())){
Toast.makeText(this,"이메일 형식으로 입력해주세요.", Toast.LENGTH_LONG).show()
}else if(task.exception?.message.equals("There is no user record corresponding to this identifier. The user may have been deleted.")) {
Toast.makeText(this, "존재하지 않는 이메일입니다.", Toast.LENGTH_LONG).show()
}else{
Log.d("---------------------------------------WARN: ", task.exception?.message.toString())
}
}
}
private fun moveToLoginPage(){
Handler().postDelayed({
val intent = Intent(this, LoginActivity::class.java)
finishAffinity() // 액티비티 스택을 비움
startActivity(intent)
}, 1500) // 1.5초 정도 딜레이를 준 후 시작
}
}