āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύ, āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĢā§‹āύ⧇ āĻāĻ•āϟāĻŋ SMS āĻŦāĻžāĻ°ā§āϤāĻž āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ Firebase Authentication āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻāϏāĻāĻŽāĻāϏ āĻŦāĻžāĻ°ā§āϤāĻžāϝāĻŧ āĻĨāĻžāĻ•āĻž āĻāĻ•āϟāĻŋ āĻāĻ•āĻ•āĻžāϞ⧀āύ āϕ⧋āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āĨ¤

āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻžāχāύ-āχāύ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āωāĻĒāĻžāϝāĻŧ āĻšāϞ FirebaseUI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž, āϝāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āĻĄā§āϰāĻĒ-āχāύ āϏāĻžāχāύ-āχāύ āωāχāĻœā§‡āϟ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻžāχāύ-āχāύ āĻ•āϰāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻāĻŦāĻ‚ āĻĢ⧇āĻĄāĻžāϰ⧇āĻŸā§‡āĻĄ āϏāĻžāχāύ-āχāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻš āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧇āĨ¤ āĻāχ āĻĻāĻ¸ā§āϤāĻžāĻŦ⧇āϜāϟāĻŋ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇ āϝ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ Firebase SDK āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻžāχāύ-āχāύ āĻĢā§āϞ⧋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

āφāĻĒāύāĻŋ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āφāϗ⧇

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āύāĻž āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύ, āϤāĻžāĻšāϞ⧇ Firebase āĻ•āύāϏ⧋āϞ āĻĨ⧇āϕ⧇ āφāĻĒāύāĻžāϰ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡ Firebase āϝ⧋āĻ— āĻ•āϰ⧁āύ-āĻ āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻ¸ā§āύāĻŋāĻĒ⧇āϟāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰ⧁āύāĨ¤

āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āωāĻĻā§āĻŦ⧇āĻ—

āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ, āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āĻšāϞ⧇āĻ“, āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϤ⧁āϞāύāĻžāϝāĻŧ āĻ•āĻŽ āύāĻŋāϰāĻžāĻĒāĻĻ, āĻ•āĻžāϰāĻŖ āĻāĻ•āϟāĻŋ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ⧇āϰ āĻĻāĻ–āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻšāĻœā§‡āχ āĻšāĻ¸ā§āϤāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻāĻ•āĻžāϧāĻŋāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āϏāĻš āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞāĻŋāϤ⧇, āϝ⧇ āϕ⧋āύāĻ“ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϝ⧇ āĻāϏāĻāĻŽāĻāϏ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āϏ⧇ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇⧎

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏāĻžāχāύ-āχāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āφāϰāĻ“ āύāĻŋāϰāĻžāĻĒāĻĻ āϏāĻžāχāύ-āχāύ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻāϟāĻŋ āĻ…āĻĢāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ āĻāĻŦāĻ‚ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻžāχāύ-āχāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻŸā§āϰ⧇āĻĄāĻ…āĻĢ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻžāύāĻžāύ⧋ āωāϚāĻŋāϤāĨ¤

āφāĻĒāύāĻžāϰ Firebase āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻžāχāύ-āχāύ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ

SMS āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ āφāĻĒāύāĻžāϰ Firebase āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻžāχāύ-āχāύ āĻĒāĻĻā§āϧāϤāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇:

  1. Firebase āĻ•āύāϏ⧋āϞ⧇ , āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āϖ⧁āϞ⧁āύāĨ¤
  2. āϏāĻžāχāύ-āχāύ āĻĒāĻĻā§āϧāϤāĻŋ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ, āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻžāχāύ-āχāύ āĻĒāĻĻā§āϧāϤāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύāĨ¤
  3. āϐāĻšā§āĻ›āĻŋāĻ• : āϏ⧇āϟāĻŋāĻ‚āϏ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ, āφāĻĒāύāĻŋ āϝ⧇ āĻ…āĻžā§āϚāϞ⧇ SMS āĻŦāĻžāĻ°ā§āϤāĻž āĻĒāĻžāĻ āĻžāύ⧋āϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻāĻŋāϤ⧇ āĻŦāĻž āĻ…āĻ¸ā§āĻŦā§€āĻ•āĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāύ āϏ⧇āϗ⧁āϞāĻŋāϰ āωāĻĒāϰ āĻāĻ•āϟāĻŋ āύ⧀āϤāĻŋ āϏ⧇āϟ āĻ•āϰ⧁āύ⧎ āĻāĻ•āϟāĻŋ SMS āĻ…āĻžā§āϚāϞ āύ⧀āϤāĻŋ āϏ⧇āϟ āĻ•āϰāĻž āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϗ⧁āϞāĻŋāϕ⧇ SMS āĻ…āĻĒāĻŦā§āϝāĻŦāĻšāĻžāϰ āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇⧎
  4. āĻāĻ•āχ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ, āϝ⧇ āĻĄā§‹āĻŽā§‡āύāϟāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻŦ⧇ āϏ⧇āϟāĻŋ āϝāĻĻāĻŋ OAuth āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻĄā§‹āĻŽā§‡āύ āĻŦāĻŋāĻ­āĻžāϗ⧇ āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āύāĻž āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻĄā§‹āĻŽā§‡āύ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤ āύ⧋āϟ āĻ•āϰ⧁āύ āϝ⧇ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻšā§‹āĻ¸ā§āϟ āĻĢā§‹āύ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāϪ⧇āϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ⧇ āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āĻĄā§‹āĻŽā§‡āύ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āύāϝāĻŧāĨ¤

reCAPTCHA āϝāĻžāϚāĻžāχāĻ•āĻžāϰ⧀ āϏ⧇āϟ āφāĻĒ āĻ•āϰ⧁āύ

āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āφāϗ⧇, āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ Firebase-āĻāϰ reCAPTCHA āϝāĻžāϚāĻžāχāĻ•āĻžāϰ⧀ āϏ⧇āϟ āφāĻĒ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻ…āĻĒāĻŦā§āϝāĻŦāĻšāĻžāϰ āϰ⧋āϧ āĻ•āϰāϤ⧇ reCAPTCHA āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϝ⧇āĻŽāύ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āĻĄā§‹āĻŽā§‡āύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻĨ⧇āϕ⧇ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϝāĻžāϚāĻžāχāĻ•āϰāϪ⧇āϰ āĻ…āύ⧁āϰ⧋āϧ āĻāϏ⧇āϛ⧇ āϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇āĨ¤

āφāĻĒāύāĻžāϕ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻāĻ•āϟāĻŋ reCAPTCHA āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϏ⧇āϟ āφāĻĒ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āύāĻž; āφāĻĒāύāĻŋ āϝāĻ–āύ Firebase SDK-āĻāϰ RecaptchaVerifier āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āϤāĻ–āύ Firebase āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϝ⧇āϕ⧋āύ⧋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϕ⧀ āĻāĻŦāĻ‚ āĻ—ā§‹āĻĒāύ⧀āϝāĻŧāϤāĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇āĨ¤

RecaptchaVerifier āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϟāĻŋ āĻ…āĻĻ⧃āĻļā§āϝ reCAPTCHA āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇, āϝāĻž āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϕ⧋āύ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻļāύ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ›āĻžāĻĄāĻŧāĻžāχ āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āϏ⧇āχāϏāĻžāĻĨ⧇ reCAPTCHA āωāχāĻœā§‡āϟ, āϝāĻž āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻ°ā§āĻŦāĻĻāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤

āĻ…āĻ¨ā§āϤāĻ°ā§āύāĻŋāĻšāĻŋāϤ āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰāĻž reCAPTCHA reCAPTCHA āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰāĻžāϰ āφāϗ⧇ Auth āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇ āĻ­āĻžāώāĻž āϕ⧋āĻĄ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ•āϰāĻŖ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻĒā§‚āĻ°ā§āĻŦā§‹āĻ•ā§āϤ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ•āϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻāϏāĻāĻŽāĻāϏ āĻŦāĻžāĻ°ā§āϤāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĻ“ āĻĒā§āϰāϝ⧋āĻœā§āϝ āĻšāĻŦ⧇, āϝāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

Web

import { getAuth } from "firebase/auth";

const auth = getAuth();
auth.languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// auth.useDeviceLanguage();

Web

firebase.auth().languageCode = 'it';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage();

āĻ…āĻĻ⧃āĻļā§āϝ reCAPTCHA āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ āĻ…āĻĻ⧃āĻļā§āϝ reCAPTCHA āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϰ āϏāĻžāχāύ-āχāύ āĻĢāĻ°ā§āĻŽ āϜāĻŽāĻž āĻĻ⧇āϝāĻŧ āĻāĻŽāύ āĻŦā§‹āϤāĻžāĻŽāϟāĻŋāϰ āφāχāĻĄāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧇ invisible āϏ⧇āϟ āĻ•āϰāĻž size āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϏāĻš āĻāĻ•āϟāĻŋ RecaptchaVerifier āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ⧎ āϝ⧇āĻŽāύ:

Web

import { getAuth, RecaptchaVerifier } from "firebase/auth";

const auth = getAuth();
window.recaptchaVerifier = new RecaptchaVerifier(auth, 'sign-in-button', {
  'size': 'invisible',
  'callback': (response) => {
    // reCAPTCHA solved, allow signInWithPhoneNumber.
    onSignInSubmit();
  }
});

Web

window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('sign-in-button', {
  'size': 'invisible',
  'callback': (response) => {
    // reCAPTCHA solved, allow signInWithPhoneNumber.
    onSignInSubmit();
  }
});

reCAPTCHA āωāχāĻœā§‡āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ

āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ reCAPTCHA āωāχāĻœā§‡āϟāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇, āωāχāĻœā§‡āϟāϟāĻŋ āϧāĻžāϰāĻŖ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϰ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ āĻāĻ•āϟāĻŋ āωāĻĒāĻžāĻĻāĻžāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āĻāĻ•āϟāĻŋ RecaptchaVerifier āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ, āϝāĻ–āύ āφāĻĒāύāĻŋ āĻāϟāĻŋ āĻ•āϰāĻŦ⧇āύ āϤāĻ–āύ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰāϟāĻŋāϰ ID āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰ⧁āύ⧎ āϝ⧇āĻŽāύ:

Web

import { getAuth, RecaptchaVerifier } from "firebase/auth";

const auth = getAuth();
window.recaptchaVerifier = new RecaptchaVerifier(auth, 'recaptcha-container', {});

Web

window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');

āϐāĻšā§āĻ›āĻŋāĻ•: reCAPTCHA āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āϐāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦ⧇ RecaptchaVerifier āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻ•āϞāĻŦā§āϝāĻžāĻ• āĻĢāĻžāĻ‚āĻļāύ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϝāĻ–āύ reCAPTCHA āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇ āĻŦāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĢāĻ°ā§āĻŽ āϜāĻŽāĻž āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ reCAPTCHA āĻŽā§‡āϝāĻŧāĻžāĻĻ āĻļ⧇āώ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ āϤāĻ–āύ āĻ•āϞ āĻ•āϰāĻž āĻšāϝāĻŧ:

Web

import { getAuth, RecaptchaVerifier } from "firebase/auth";

const auth = getAuth();
window.recaptchaVerifier = new RecaptchaVerifier(auth, 'recaptcha-container', {
  'size': 'normal',
  'callback': (response) => {
    // reCAPTCHA solved, allow signInWithPhoneNumber.
    // ...
  },
  'expired-callback': () => {
    // Response expired. Ask user to solve reCAPTCHA again.
    // ...
  }
});

Web

window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container', {
  'size': 'normal',
  'callback': (response) => {
    // reCAPTCHA solved, allow signInWithPhoneNumber.
    // ...
  },
  'expired-callback': () => {
    // Response expired. Ask user to solve reCAPTCHA again.
    // ...
  }
});

āϐāĻšā§āĻ›āĻŋāĻ•: reCAPTCHA āĻĒā§āϰāĻŋ-āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āϏāĻžāχāύ-āχāύ āĻ…āύ⧁āϰ⧋āϧ āϜāĻŽāĻž āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ reCAPTCHA āĻĒā§āϰāĻŋ-āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāχāϞ⧇, render āĻ•āϞ āĻ•āϰ⧁āύ:

Web

recaptchaVerifier.render().then((widgetId) => {
  window.recaptchaWidgetId = widgetId;
});

Web

recaptchaVerifier.render().then((widgetId) => {
  window.recaptchaWidgetId = widgetId;
});

render āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āĻĒāϰ⧇, āφāĻĒāύāĻŋ reCAPTCHA āĻāϰ āωāχāĻœā§‡āϟ āφāχāĻĄāĻŋ āĻĒāĻžāĻŦ⧇āύ, āϝāĻž āφāĻĒāύāĻŋ reCAPTCHA API āĻ āĻ•āϞ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

Web

const recaptchaResponse = grecaptcha.getResponse(recaptchaWidgetId);

Web

const recaptchaResponse = grecaptcha.getResponse(recaptchaWidgetId);

āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĢā§‹āύ⧇ āĻāĻ•āϟāĻŋ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āĻĒāĻžāĻ āĻžāύ

āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻžāχāύ-āχāύ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧁āύ āϝāĻž āϤāĻžāĻĻ⧇āϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ Firebase āϝāĻžāϤ⧇ SMS āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĢā§‹āύ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āϕ⧋āĻĄ āĻĒāĻžāĻ āĻžāϤ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ signInWithPhoneNumber āĻ āĻ•āϞ āĻ•āϰ⧁āύ:

  1. āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĒāĻžāύāĨ¤

    āφāχāύāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻŋ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āĻ…āύ⧁āĻļā§€āϞāύ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻž āϏ⧇āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ āϤāĻžāĻĻ⧇āϰ āϜāĻžāύāĻžāύ⧋ āωāϚāĻŋāϤ āϝ⧇ āϝāĻĻāĻŋ āϤāĻžāϰāĻž āĻĢā§‹āύ āϏāĻžāχāύ-āχāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϤāĻžāĻšāϞ⧇ āϤāĻžāϰāĻž āϝāĻžāϚāĻžāχāĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ SMS āĻŦāĻžāĻ°ā§āϤāĻž āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āĻŽāĻžāύ āĻĻāϰ āĻĒā§āϰāϝ⧋āĻœā§āϝāĨ¤

  2. Call signInWithPhoneNumber , āĻāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āφāϗ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž RecaptchaVerifier āĻĒāĻžāĻ āĻžāύāĨ¤

    Web

    import { getAuth, signInWithPhoneNumber } from "firebase/auth";
    
    const phoneNumber = getPhoneNumberFromUserInput();
    const appVerifier = window.recaptchaVerifier;
    
    const auth = getAuth();
    signInWithPhoneNumber(auth, phoneNumber, appVerifier)
        .then((confirmationResult) => {
          // SMS sent. Prompt user to type the code from the message, then sign the
          // user in with confirmationResult.confirm(code).
          window.confirmationResult = confirmationResult;
          // ...
        }).catch((error) => {
          // Error; SMS not sent
          // ...
        });

    Web

    const phoneNumber = getPhoneNumberFromUserInput();
    const appVerifier = window.recaptchaVerifier;
    firebase.auth().signInWithPhoneNumber(phoneNumber, appVerifier)
        .then((confirmationResult) => {
          // SMS sent. Prompt user to type the code from the message, then sign the
          // user in with confirmationResult.confirm(code).
          window.confirmationResult = confirmationResult;
          // ...
        }).catch((error) => {
          // Error; SMS not sent
          // ...
        });
    āϝāĻĻāĻŋ signInWithPhoneNumber āĻāϰ āĻĢāϞ⧇ āϕ⧋āύ⧋ āĻ¤ā§āϰ⧁āϟāĻŋ āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ reCAPTCHA āϰāĻŋāϏ⧇āϟ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāĻŦāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇:
    grecaptcha.reset(window.recaptchaWidgetId);
    
    // Or, if you haven't stored the widget ID:
    window.recaptchaVerifier.render().then(function(widgetId) {
      grecaptcha.reset(widgetId);
    });

signInWithPhoneNumber āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ reCAPTCHA āĻšā§āϝāĻžāϞ⧇āĻžā§āϜ āχāĻ¸ā§āϝ⧁ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻšā§āϝāĻžāϞ⧇āĻžā§āϜāϟāĻŋ āĻĒāĻžāϏ āĻ•āϰāϞ⧇, Firebase Authentication āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĢā§‹āύ⧇ āĻāĻ•āϟāĻŋ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āϏāĻš āĻāĻ•āϟāĻŋ SMS āĻŦāĻžāĻ°ā§āϤāĻž āĻĒāĻžāĻ āĻžāϤ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰ⧇āĨ¤

āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ

signInWithPhoneNumber āĻ āĻ•āϞāϟāĻŋ āϏāĻĢāϞ āĻšāĻ“āϝāĻŧāĻžāϰ āĻĒāϰ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ SMS āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻžāĻĒā§āϤ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄāϟāĻŋ āϟāĻžāχāĻĒ āĻ•āϰāϤ⧇ āĻŦāϞ⧁āύāĨ¤ āϤāĻžāϰāĻĒāϰ, ConfirmationResult āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ confirm āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āϕ⧋āĻĄāϟāĻŋ āĻĒāĻžāϏ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ āϝāĻž signInWithPhoneNumber āĻāϰ āĻĒāϰāĻŋāĻĒā§‚āĻ°ā§āĻŖāϤāĻž āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ (āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻāϟāĻŋ then āĻŦā§āϞāĻ•)āĨ¤ āϝ⧇āĻŽāύ:

Web

const code = getCodeFromUserInput();
confirmationResult.confirm(code).then((result) => {
  // User signed in successfully.
  const user = result.user;
  // ...
}).catch((error) => {
  // User couldn't sign in (bad verification code?)
  // ...
});

Web

const code = getCodeFromUserInput();
confirmationResult.confirm(code).then((result) => {
  // User signed in successfully.
  const user = result.user;
  // ...
}).catch((error) => {
  // User couldn't sign in (bad verification code?)
  // ...
});

confirm āĻ•āϞ āϏāĻĢāϞ āĻšāϞ⧇, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āϛ⧇āύāĨ¤

āĻŽāĻ§ā§āϝāĻŦāĻ°ā§āϤ⧀ AuthCredential āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĒāĻžāύ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ AuthCredential āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĒ⧇āϤ⧇ āϚāĻžāύ, āύāĻŋāĻļā§āϚāĻŋāϤāĻ•āϰāϪ⧇āϰ āĻĢāϞāĻžāĻĢāϞ āĻĨ⧇āϕ⧇ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āĻāĻŦāĻ‚ confirm āĻ•āϞ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ PhoneAuthProvider.credential āĻ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄāϟāĻŋ āĻĒāĻžāϏ āĻ•āϰ⧁āύ:

var credential = firebase.auth.PhoneAuthProvider.credential(confirmationResult.verificationId, code);

āϤāĻžāϰāĻĒāϰ, āφāĻĒāύāĻŋ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

firebase.auth().signInWithCredential(credential);

āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ Firebase āĻ•āύāϏ⧋āϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏ⧇āϟ āφāĻĒ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻāχ āϏ⧁āĻŦāĻŋāϧāĻžāϗ⧁āϞāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇:

  • āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϕ⧋āϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻ•āϰ⧇ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤
  • āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§ƒāϤ SMS āĻŦāĻžāĻ°ā§āϤāĻž āύāĻž āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤
  • āĻĨā§āϰ⧋āϟāϞ āύāĻž āĻšāϝāĻŧ⧇ āĻāĻ•āχ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻžāύāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āϚāĻžāϞāĻžāύāĨ¤ āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻĒ āĻ¸ā§āĻŸā§‹āϰ āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāύāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϚāϞāĻžāĻ•āĻžāϞ⧀āύ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻ–ā§āϝāĻžāύ⧇āϰ āĻā§āρāĻ•āĻŋ āĻ•āĻŽāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ āϝāĻĻāĻŋ āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāĻ• āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āχ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύāĨ¤
  • āϕ⧋āύāĻ“ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻž āĻ›āĻžāĻĄāĻŧāĻžāχ āĻŦāĻŋāĻ•āĻžāĻļ⧇āϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āϏāĻšāĻœā§‡āχ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ, āϝ⧇āĻŽāύ Google Play āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋ āĻ›āĻžāĻĄāĻŧāĻžāχ iOS āϏāĻŋāĻŽā§āϞ⧇āϟāϰ āĻŦāĻž Android āĻāĻŽā§āϞ⧇āϟāϰ⧇ āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻžāĨ¤
  • āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻĒā§āϰāĻ•ā§ƒāϤ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ⧇ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻšā§‡āĻ• āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϞāĻ• āύāĻž āĻšāϝāĻŧ⧇ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻĒāϰ⧀āĻ•ā§āώāĻž āϞāĻŋāϖ⧁āύāĨ¤

āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰāϗ⧁āϞāĻŋ āĻ…āĻŦāĻļā§āϝāχ āĻāχ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻžāϗ⧁āϞāĻŋ āĻĒā§‚āϰāĻŖ āĻ•āϰāĻŦ⧇:

  1. āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āϝ⧇ āφāĻĒāύāĻŋ āĻāĻŽāύ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇āύ āϝāĻž āφāϏāϞ⧇āχ āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ•, āĻāĻŦāĻ‚ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āύ⧇āχāĨ¤ Firebase Authentication āφāĻĒāύāĻžāϕ⧇ āφāϏāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰāϗ⧁āϞāĻŋāϕ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āύāĻŽā§āĻŦāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏ⧇āϟ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ āύāĻžāĨ¤ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāϞ āχāωāĻāϏ āĻŸā§‡āĻ¸ā§āϟ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ 555 āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏāĻĄ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ: +1 650-555-3434
  2. āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āϜāĻ¨ā§āϝ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻĢāϰāĻŽā§āϝāĻžāϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϤāĻžāϰāĻž āĻāĻ–āύāĻ“ āĻĒā§āϰāĻ•ā§ƒāϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ⧇āϰ āĻŽāϤ⧋ āĻāĻ•āχ āĻŦ⧈āϧāϤāĻžāϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āϝāĻžāĻŦ⧇āĨ¤
  3. āφāĻĒāύāĻŋ āĻŦāĻŋāĻ•āĻžāĻļ⧇āϰ āϜāĻ¨ā§āϝ 10āϟāĻŋ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎
  4. āĻĒāϰ⧀āĻ•ā§āώāĻžāĻŽā§‚āϞāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ/āϕ⧋āĻĄāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻž āĻ…āύ⧁āĻŽāĻžāύ āĻ•āϰāĻž āĻ•āĻ āĻŋāύ āĻāĻŦāĻ‚ āϘāύ āϘāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύāĨ¤

āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻāĻŦāĻ‚ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

  1. Firebase āĻ•āύāϏ⧋āϞ⧇ , āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āϖ⧁āϞ⧁āύāĨ¤
  2. āϏāĻžāχāύ āχāύ āĻĒāĻĻā§āϧāϤāĻŋ āĻŸā§āϝāĻžāĻŦ⧇, āĻĢā§‹āύ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āύāĻž āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύāĨ¤
  3. āĻ…ā§āϝāĻžāĻ•āĻ°ā§āĻĄāĻŋāϝāĻŧāύ āĻŽā§‡āύ⧁ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āϖ⧁āϞ⧁āύāĨ¤
  4. āφāĻĒāύāĻŋ āϝ⧇ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰāϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧁āύ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ: +1 650-555-3434 āĨ¤
  5. āϏ⧇āχ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āύāĻŽā§āĻŦāϰ⧇āϰ āϜāĻ¨ā§āϝ 6-āϏāĻ‚āĻ–ā§āϝāĻžāϰ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧁āύ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ: 654321 āĨ¤
  6. āύāĻŽā§āĻŦāϰ āϝ⧋āĻ— āĻ•āϰ⧁āύ āĨ¤ āϝāĻĻāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ, āφāĻĒāύāĻŋ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻāĻŦāĻ‚ āĻāϰ āϕ⧋āĻĄāϟāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāϤ⧇ āĻĒāĻžāϰ⧇āύ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āϏāĻžāϰāĻŋāϰ āωāĻĒāϰ āĻšā§‹āĻ­āĻžāϰ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻŸā§āĻ°ā§āϝāĻžāĻļ āφāχāĻ•āύ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧇āĨ¤

āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚

āφāĻĒāύāĻŋ āϏāϰāĻžāϏāϰāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āϕ⧋āϟāĻž āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āϏāĻŽāĻ¸ā§āϝāĻž āĻŦāĻž āĻĨā§āϰāϟāϞāĻŋāĻ‚ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻŦāĻŋāĻ•āĻžāĻļ⧇āϰ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āφāĻĒāύāĻŋ Google Play āĻĒāϰāĻŋāώ⧇āĻŦāĻž āχāύāĻ¸ā§āϟāϞ āύāĻž āĻ•āϰ⧇ āϏāϰāĻžāϏāϰāĻŋ iOS āϏāĻŋāĻŽā§āϞ⧇āϟāϰ āĻŦāĻž Android āĻāĻŽā§āϞ⧇āϟāϰ āĻĨ⧇āϕ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāĻĒāύāĻŋ āϝāĻ–āύ āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āύ āĻāĻŦāĻ‚ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āĻĒāĻžāĻ āĻžāύ, āϤāĻ–āύ āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§ƒāϤ SMS āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧ āύāĻžāĨ¤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇, āϏāĻžāχāύ āχāύ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϕ⧇ āĻĒā§‚āĻ°ā§āĻŦ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϕ⧋āĻĄ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āϏāĻžāχāύ-āχāύ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāϞ⧇, āϏ⧇āχ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϜāύ Firebase āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽāϤ⧋ āĻāĻ•āχ āφāϚāϰāĻŖ āĻāĻŦāĻ‚ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϰāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ Realtime Database / Cloud Firestore āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇⧎ āĻāχ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āϝ⧇ āφāχāĻĄāĻŋ āĻŸā§‹āϕ⧇āύāϟāĻŋ āĻŽāĻŋāĻ¨ā§āϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āϤāĻžāϤ⧇ āĻāĻ•āϜāύ āĻĒā§āϰāĻ•ā§ƒāϤ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽāϤ⧋āχ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āφāϰ⧇āĻ•āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāϞ āĻāχ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āωāĻĒāϰ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĻāĻžāĻŦāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āϏ⧇āϟ āĻ•āϰāĻž āϝāĻžāϤ⧇ āφāĻĒāύāĻŋ āϤāĻžāĻĻ⧇āϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏāϕ⧇ āφāϰāĻ“ āϏ⧀āĻŽāĻŋāϤ āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻžāĻšāϞ⧇ āϤāĻžāĻĻ⧇āϰ āϜāĻžāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻšāĻŋāϏāĻžāĻŦ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚

āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, Firebase Authentication āĻĢā§‹āύ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻĒāϰ⧀āĻ•ā§āώāĻž āϞāĻŋāĻ–āϤ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ API āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ āĻāχ APIāϗ⧁āϞāĻŋ āĻ“āϝāĻŧ⧇āĻŦ⧇ reCAPTCHA āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻāĻŦāĻ‚ iOS-āĻ āύ⧀āϰāĻŦ āĻĒ⧁āĻļ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋāϗ⧁āϞāĻŋ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰ⧇ āĻ…ā§āϝāĻžāĻĒ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰ⧇⧎ āĻāϟāĻŋ āĻāχ āĻĒā§āϰāĻŦāĻžāĻšā§‡ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ āĻĒāϰ⧀āĻ•ā§āώāĻžāϕ⧇ āϏāĻŽā§āĻ­āĻŦ āĻ•āϰ⧇ āϤ⧋āϞ⧇ āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāĻž āϏāĻšāϜ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤ āωāĻĒāϰāĻ¨ā§āϤ⧁, āϤāĻžāϰāĻž Android āĻ āϤāĻžā§ŽāĻ•ā§āώāĻŖāĻŋāĻ• āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āĻĒā§āϰāĻŦāĻžāĻš āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤

āĻ“āϝāĻŧ⧇āĻŦ⧇, firebase.auth.RecaptchaVerifier āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰāĻžāϰ āφāϗ⧇ appVerificationDisabledForTesting true āϏ⧇āϟ āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ reCAPTCHA āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇, āφāĻĒāύāĻžāϕ⧇ āĻĢā§‹āύ āύāĻŽā§āĻŦāϰāϟāĻŋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āϏāĻŽāĻžāϧāĻžāύ āύāĻž āĻ•āϰ⧇ āĻĒāĻžāϏ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ⧎ āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āϝāĻĻāĻŋāĻ“ reCAPTCHA āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻāĻ•āϟāĻŋ āĻ…-āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ–āύāĻ“ āϏāĻžāχāύ āχāύ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻŦ⧇āĨ¤ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ•āĻžāĻ˛ā§āĻĒāύāĻŋāĻ• āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ āĻāχ API āĻāϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

// Turn off phone auth app verification.
firebase.auth().settings.appVerificationDisabledForTesting = true;

var phoneNumber = "+16505554567";
var testVerificationCode = "123456";

// This will render a fake reCAPTCHA as appVerificationDisabledForTesting is true.
// This will resolve after rendering without app verification.
var appVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');
// signInWithPhoneNumber will call appVerifier.verify() which will resolve with a fake
// reCAPTCHA response.
firebase.auth().signInWithPhoneNumber(phoneNumber, appVerifier)
    .then(function (confirmationResult) {
      // confirmationResult can resolve with the fictional testVerificationCode above.
      return confirmationResult.confirm(testVerificationCode)
    }).catch(function (error) {
      // Error; SMS not sent
      // ...
    });

āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ āĻāĻŦāĻ‚ āĻ…āĻĻ⧃āĻļā§āϝ āĻŽāĻ• reCAPTCHA āĻ…ā§āϝāĻžāĻĒ āϝāĻžāϚāĻžāχāĻ•āĻžāϰ⧀āϰāĻž āĻ­āĻŋāĻ¨ā§āύāĻ­āĻžāĻŦ⧇ āφāϚāϰāĻŖ āĻ•āϰ⧇ āϝāĻ–āύ āĻ…ā§āϝāĻžāĻĒ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āĻ…āĻ•ā§āώāĻŽ āĻĨāĻžāϕ⧇:

  • āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ reCAPTCHA : āϝāĻ–āύ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ reCAPTCHA appVerifier.render() āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻ–āύ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻŦāĻŋāϞāĻŽā§āĻŦ⧇āϰ āĻāĻ•āϟāĻŋ āĻ­āĻ—ā§āύāĻžāĻ‚āĻļ⧇āϰ āĻĒāϰ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āϰ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋāĻ‚āϝāĻŧ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇āχ reCAPTCHA-āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϏāĻŽāϤ⧁āĻ˛ā§āϝāĨ¤ reCAPTCHA āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ⧇āϰ āĻĒāϰ⧇ āĻŽā§‡āϝāĻŧāĻžāĻĻ āĻļ⧇āώ āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āφāĻŦāĻžāϰ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻšāĻŦ⧇āĨ¤
  • āĻ…āĻĻ⧃āĻļā§āϝ reCAPTCHA : āĻ…āĻĻ⧃āĻļā§āϝ reCAPTCHA āϰ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋāĻ‚-āĻ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇ āύāĻž āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ appVerifier.verify() āĻ•āϞ⧇ āĻŦāĻž āϝāĻ–āύ reCAPTCHA-āĻāϰ āĻŦā§‹āϤāĻžāĻŽ āĻ…ā§āϝāĻžāĻ™ā§āĻ•āϰāϟāĻŋ āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻŦāĻŋāϞāĻŽā§āĻŦ⧇āϰ āĻāĻ•āϟāĻŋ āĻ­āĻ—ā§āύāĻžāĻ‚āĻļ⧇āϰ āĻĒāϰ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ āϤāĻ–āύ āϤāĻž āĻ•āϰ⧇āĨ¤ āĻāĻ•āχāĻ­āĻžāĻŦ⧇, āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ⧇āϰ āĻĒāϰ⧇ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āĻŽā§‡āϝāĻŧāĻžāĻĻ āĻļ⧇āώ āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇ āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ appVerifier.verify() āĻ•āϞ⧇āϰ āĻĒāϰ⧇ āĻ…āĻĨāĻŦāĻž reCAPTCHA-āĻāϰ āĻŦā§‹āϤāĻžāĻŽ āĻ…ā§āϝāĻžāĻ™ā§āĻ•āϰ⧇ āφāĻŦāĻžāϰ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāĻžāϰ āĻĒāϰ⧇āχ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻšāĻŦ⧇āĨ¤

āϝāĻ–āύāχ āĻāĻ•āϟāĻŋ āĻŽāĻ• reCAPTCHA āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ, āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻ•āϞāĻŦā§āϝāĻžāĻ• āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āϜāĻžāϞ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤāĻ­āĻžāĻŦ⧇ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻšāϝāĻŧ⧎ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻŽā§‡āϝāĻŧāĻžāĻĻ āĻļ⧇āώ āĻšāĻ“āϝāĻŧāĻžāϰ āĻ•āϞāĻŦā§āϝāĻžāĻ•āĻ“ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻž āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻāϟāĻŋ āĻŽā§‡āϝāĻŧāĻžāĻĻ āĻļ⧇āώ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰāĻŦ⧇āĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ

āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ—āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϤāĻĨā§āϝ — āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āϛ⧇āύāĨ¤ āĻāχ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ āύāĻž āϕ⧇āύ, āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…ā§āϝāĻžāĻĒ āϜ⧁āĻĄāĻŧ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

  • āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇, āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāϪ⧇āϰ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āϜāĻžāύāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āωāĻĒāĻžāϝāĻŧ āĻšāϞ Auth āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻāĻ•āϜāύ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻ• āϏ⧇āϟ āĻ•āϰāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ āφāĻĒāύāĻŋ User āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽā§ŒāϞāĻŋāĻ• āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āϤāĻĨā§āϝ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻĻ⧇āϖ⧁āύāĨ¤

  • āφāĻĒāύāĻžāϰ Firebase Realtime Database āĻāĻŦāĻ‚ Cloud Storage āϏ⧁āϰāĻ•ā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§‡ , āφāĻĒāύāĻŋ auth āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĨ⧇āϕ⧇ āϏāĻžāχāύ-āχāύ āĻ•āϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…āύāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāχāĻĄāĻŋ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϕ⧋āύ āĻĄā§‡āϟāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāĻžāχāύ āφāωāϟ āĻ•āϰāϤ⧇, signOut āĻ•āϞ āĻ•āϰ⧁āύ:

Web

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});