๐ŸŒ„ Sandamso ํ”„๋กœ์ ํŠธ - 3

kkominยท2023๋…„ 10์›” 18์ผ
0

Android Studio

๋ชฉ๋ก ๋ณด๊ธฐ
39/44
post-thumbnail

Firebase์™€ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋ฅผ ์ž˜ ์ด์šฉํ•˜๋ฉด ๋š - ๋”ฑ ! ํ•˜๊ณ  ์™„์„ฑ๋˜๋‹ˆ๊นŒ ๊ธฐ๋ถ„ ์ข‹๋‹ค..


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("์•„์ด๋”” ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.")
      }
  }

๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์ด๋ฉ”์ผ

Password ์ฐพ๊ธฐ ๋ ˆ์ด์•„์›ƒ ์„ค์ •

๋ ˆ์ด์•„์›ƒ์€ ๋‹ค์Œ figma๋ฅผ ์ฐธ๊ณ ํ•ด์„œ Activity๋กœ ๊ตฌํ˜„ํ•ด์ค€๋‹ค.


Password ์ฐพ๊ธฐ ๊ธฐ๋Šฅ ์„ค์ •

๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ 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.")
        }
    }
profile
์†Œ์†Œํ•œ ์ฝ”๋”ฉ ์ผ๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€