ตรวจสอบสิทธิ์ด้วย Firebase โดยใช้บัญชีแบบใช้รหัสผ่านใน Android

คุณใช้ Firebase Authentication เพื่อให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้อีเมลและรหัสผ่านของตนเอง และเพื่อจัดการบัญชีที่ใช้รหัสผ่านของแอปได้

ก่อนเริ่มต้น

  1. หากยังไม่ได้ดำเนินการ ให้เพิ่ม Firebase ลงในโปรเจ็กต์ Android

  2. หากยังไม่ได้เชื่อมต่อแอปกับโปรเจ็กต์ Firebase ให้เชื่อมต่อจากFirebaseคอนโซล
  3. เปิดใช้การลงชื่อเข้าใช้ด้วยอีเมล/รหัสผ่าน
    1. ในคอนโซล Firebase ให้เปิด ส่วนการตรวจสอบสิทธิ์
    2. ในแท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้อีเมล/รหัสผ่าน แล้วคลิกบันทึก
  4. ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ให้เพิ่มทรัพยากร Dependency สำหรับคลัง Firebase Authentication สำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมการควบคุมเวอร์ชันของไลบรารี

    dependencies {     // Import the BoM for the Firebase platform     implementation(platform("com.google.firebase:firebase-bom:34.1.0"))      // Add the dependency for the Firebase Authentication library     // When using the BoM, you don't specify versions in Firebase library dependencies     implementation("com.google.firebase:firebase-auth") }

    การใช้ Firebase Android BoM จะทำให้แอปใช้ไลบรารี Firebase Android เวอร์ชันที่เข้ากันได้อยู่เสมอ

    (ทางเลือก)  เพิ่มการอ้างอิงไลบรารี Firebase โดยไม่ใช้ BoM

    หากเลือกไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันของไลบรารี Firebase แต่ละรายการ ในบรรทัดการอ้างอิง

    โปรดทราบว่าหากคุณใช้ไลบรารี Firebase หลายรายการในแอป เราขอแนะนำเป็นอย่างยิ่ง ให้ใช้ BoM เพื่อจัดการเวอร์ชันของไลบรารี ซึ่งจะช่วยให้มั่นใจได้ว่าทุกเวอร์ชันจะ เข้ากันได้

    dependencies {     // Add the dependency for the Firebase Authentication library     // When NOT using the BoM, you must specify versions in Firebase library dependencies     implementation("com.google.firebase:firebase-auth:24.0.1") }

สร้างบัญชีที่ใช้รหัสผ่าน

หากต้องการสร้างบัญชีผู้ใช้ใหม่ด้วยรหัสผ่าน ให้ทำตามขั้นตอนต่อไปนี้ในกิจกรรมการลงชื่อเข้าใช้ของแอป

  1. ในonCreateเมธอดของกิจกรรมการลงชื่อสมัครใช้ ให้รับอินสแตนซ์ที่แชร์ ของออบเจ็กต์ FirebaseAuth

    Kotlin

    private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth

    Java

    private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
  2. เมื่อเริ่มต้นกิจกรรม ให้ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้อยู่หรือไม่

    Kotlin

    public override fun onStart() {     super.onStart()     // Check if user is signed in (non-null) and update UI accordingly.     val currentUser = auth.currentUser     if (currentUser != null) {         reload()     } }

    Java

    @Override public void onStart() {     super.onStart();     // Check if user is signed in (non-null) and update UI accordingly.     FirebaseUser currentUser = mAuth.getCurrentUser();     if(currentUser != null){         reload();     } }
  3. เมื่อผู้ใช้ใหม่ลงชื่อสมัครใช้โดยใช้แบบฟอร์มลงชื่อสมัครใช้ของแอป ให้ทำตามขั้นตอนการตรวจสอบบัญชีใหม่ที่แอปกำหนด เช่น การยืนยันว่าผู้ใช้ป้อนรหัสผ่านของบัญชีใหม่ถูกต้องและเป็นไปตามข้อกำหนดด้านความซับซ้อน
  4. สร้างบัญชีใหม่โดยส่งอีเมลและรหัสผ่านของผู้ใช้ใหม่ ไปยัง createUserWithEmailAndPassword:

    Kotlin

    auth.createUserWithEmailAndPassword(email, password)     .addOnCompleteListener(this) { task ->         if (task.isSuccessful) {             // Sign in success, update UI with the signed-in user's information             Log.d(TAG, "createUserWithEmail:success")             val user = auth.currentUser             updateUI(user)         } else {             // If sign in fails, display a message to the user.             Log.w(TAG, "createUserWithEmail:failure", task.exception)             Toast.makeText(                 baseContext,                 "Authentication failed.",                 Toast.LENGTH_SHORT,             ).show()             updateUI(null)         }     }

    Java

    mAuth.createUserWithEmailAndPassword(email, password)         .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {             @Override             public void onComplete(@NonNull Task<AuthResult> task) {                 if (task.isSuccessful()) {                     // Sign in success, update UI with the signed-in user's information                     Log.d(TAG, "createUserWithEmail:success");                     FirebaseUser user = mAuth.getCurrentUser();                     updateUI(user);                 } else {                     // If sign in fails, display a message to the user.                     Log.w(TAG, "createUserWithEmail:failure", task.getException());                     Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",                             Toast.LENGTH_SHORT).show();                     updateUI(null);                 }             }         });
    หากมีการสร้างบัญชีใหม่ ระบบจะลงชื่อเข้าใช้ให้ผู้ใช้ด้วย ใน Callback คุณสามารถใช้เมธอด getCurrentUser เพื่อรับข้อมูลบัญชีของผู้ใช้

ลงชื่อเข้าใช้ผู้ใช้ด้วยอีเมลและรหัสผ่าน

ขั้นตอนการลงชื่อเข้าใช้ของผู้ใช้ด้วยรหัสผ่านจะคล้ายกับขั้นตอนการ สร้างบัญชีใหม่ ในกิจกรรมการลงชื่อเข้าใช้ของแอป ให้ทำดังนี้

  1. ในonCreateเมธอดของกิจกรรมการลงชื่อเข้าใช้ ให้รับอินสแตนซ์ที่แชร์ของออบเจ็กต์ FirebaseAuth

    Kotlin

    private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth

    Java

    private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
  2. เมื่อเริ่มต้นกิจกรรม ให้ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้อยู่หรือไม่

    Kotlin

    public override fun onStart() {     super.onStart()     // Check if user is signed in (non-null) and update UI accordingly.     val currentUser = auth.currentUser     if (currentUser != null) {         reload()     } }

    Java

    @Override public void onStart() {     super.onStart();     // Check if user is signed in (non-null) and update UI accordingly.     FirebaseUser currentUser = mAuth.getCurrentUser();     if(currentUser != null){         reload();     } }
  3. เมื่อผู้ใช้ลงชื่อเข้าใช้แอป ให้ส่งอีเมลและ รหัสผ่านของผู้ใช้ไปยัง signInWithEmailAndPassword

    Kotlin

    auth.signInWithEmailAndPassword(email, password)     .addOnCompleteListener(this) { task ->         if (task.isSuccessful) {             // Sign in success, update UI with the signed-in user's information             Log.d(TAG, "signInWithEmail:success")             val user = auth.currentUser             updateUI(user)         } else {             // If sign in fails, display a message to the user.             Log.w(TAG, "signInWithEmail:failure", task.exception)             Toast.makeText(                 baseContext,                 "Authentication failed.",                 Toast.LENGTH_SHORT,             ).show()             updateUI(null)         }     }

    Java

    mAuth.signInWithEmailAndPassword(email, password)         .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {             @Override             public void onComplete(@NonNull Task<AuthResult> task) {                 if (task.isSuccessful()) {                     // Sign in success, update UI with the signed-in user's information                     Log.d(TAG, "signInWithEmail:success");                     FirebaseUser user = mAuth.getCurrentUser();                     updateUI(user);                 } else {                     // If sign in fails, display a message to the user.                     Log.w(TAG, "signInWithEmail:failure", task.getException());                     Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",                             Toast.LENGTH_SHORT).show();                     updateUI(null);                 }             }         });
    หากลงชื่อเข้าใช้สำเร็จ คุณจะใช้ FirebaseUser ที่ระบบส่งคืนเพื่อดำเนินการต่อได้

แนะนำ: ตั้งค่านโยบายรหัสผ่าน

คุณสามารถเพิ่มความปลอดภัยให้กับบัญชีได้ด้วยการบังคับใช้ข้อกำหนดรหัสผ่านที่ซับซ้อน

หากต้องการกำหนดค่านโยบายรหัสผ่านสำหรับโปรเจ็กต์ ให้เปิดแท็บนโยบายรหัสผ่าน ในหน้าการตั้งค่าการตรวจสอบสิทธิ์ของคอนโซล Firebase

การตั้งค่าการตรวจสอบสิทธิ์

Firebase Authentication นโยบายรหัสผ่านรองรับข้อกำหนดของรหัสผ่านต่อไปนี้

  • ต้องมีอักขระตัวพิมพ์เล็ก

  • ต้องมีอักขระตัวพิมพ์ใหญ่

  • ต้องเป็นอักขระตัวเลข

  • ต้องมีอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกัน

    อักขระต่อไปนี้เป็นไปตามข้อกำหนดของอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกัน ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • ความยาวขั้นต่ำของรหัสผ่าน (ตั้งแต่ 6 ถึง 30 อักขระ โดยค่าเริ่มต้นคือ 6)

  • ความยาวสูงสุดของรหัสผ่าน (ความยาวสูงสุด 4096 อักขระ)

คุณเปิดใช้การบังคับใช้นโยบายรหัสผ่านได้ 2 โหมด ดังนี้

  • กำหนด: การพยายามลงชื่อสมัครใช้จะล้มเหลวจนกว่าผู้ใช้จะอัปเดตรหัสผ่าน ที่เป็นไปตามนโยบายของคุณ

  • แจ้ง: ผู้ใช้จะลงชื่อสมัครใช้ด้วยรหัสผ่านที่ไม่เป็นไปตามนโยบายได้ เมื่อใช้โหมดนี้ คุณควรตรวจสอบว่ารหัสผ่านของผู้ใช้เป็นไปตามนโยบายในฝั่งไคลเอ็นต์หรือไม่ และแจ้งให้ผู้ใช้อัปเดตรหัสผ่านหากไม่เป็นไปตามนโยบาย

ผู้ใช้ใหม่จะต้องเลือกรหัสผ่านที่เป็นไปตามนโยบายของคุณเสมอ

หากมีผู้ใช้ที่ใช้งานอยู่ เราขอแนะนำว่าอย่าเปิดใช้การบังคับอัปเกรดเมื่อลงชื่อเข้าใช้ เว้นแต่คุณต้องการบล็อกการเข้าถึงของผู้ใช้ที่มีรหัสผ่านไม่เป็นไปตาม นโยบายของคุณ แต่ให้ใช้โหมดแจ้งเตือนแทน ซึ่งจะช่วยให้ผู้ใช้ลงชื่อเข้าใช้ด้วย รหัสผ่านปัจจุบันได้ และแจ้งให้ผู้ใช้ทราบถึงข้อกำหนดที่รหัสผ่านยังขาดอยู่

แนะนำ: เปิดใช้การป้องกันการแจงนับอีเมล

เมธอด Firebase Authentication บางอย่างที่ใช้อีเมลเป็นพารามิเตอร์จะแสดงข้อผิดพลาดที่เฉพาะเจาะจงหากอีเมลไม่ได้ลงทะเบียนในกรณีที่ต้องลงทะเบียน (เช่น เมื่อลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่าน) หรือลงทะเบียน ในกรณีที่ต้องไม่ได้ใช้ (เช่น เมื่อเปลี่ยนอีเมลของผู้ใช้) แม้ว่าฟีเจอร์นี้จะเป็นประโยชน์ในการแนะนำวิธีแก้ไขปัญหาที่เฉพาะเจาะจงแก่ผู้ใช้ แต่ผู้ไม่ประสงค์ดีก็อาจใช้ฟีเจอร์นี้ในทางที่ผิดเพื่อค้นหาอีเมลที่ผู้ใช้ของคุณลงทะเบียนไว้ได้เช่นกัน

เราขอแนะนำให้คุณเปิดใช้การป้องกันการแจงนับอีเมล สำหรับโปรเจ็กต์โดยใช้เครื่องมือ gcloud ของ Google Cloud เพื่อลดความเสี่ยงนี้ โปรดทราบว่าการเปิดใช้ฟีเจอร์นี้จะเปลี่ยนลักษณะการทำงานของการรายงานข้อผิดพลาดของ Firebase Authentication ดังนั้นโปรดตรวจสอบว่าแอปของคุณไม่ได้อิงตามข้อผิดพลาดที่เฉพาะเจาะจงมากขึ้น

ขั้นตอนถัดไป

หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่และ ลิงก์กับข้อมูลเข้าสู่ระบบ ซึ่งได้แก่ ชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลผู้ให้บริการตรวจสอบสิทธิ์ที่ผู้ใช้ลงชื่อเข้าใช้ ระบบจะจัดเก็บบัญชีใหม่นี้เป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และสามารถใช้เพื่อระบุตัวตน ผู้ใช้ในทุกแอปในโปรเจ็กต์ได้ ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้ด้วยวิธีใดก็ตาม

  • ในแอป คุณสามารถรับข้อมูลโปรไฟล์พื้นฐานของผู้ใช้จากออบเจ็กต์ FirebaseUser ได้ ดู จัดการผู้ใช้

  • ใน Firebase Realtime Database และ Cloud Storage กฎความปลอดภัย คุณสามารถ รับรหัสผู้ใช้ที่ไม่ซ้ำของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้รหัสดังกล่าวเพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้

คุณอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้ผู้ให้บริการตรวจสอบสิทธิ์หลายรายได้โดยลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่

หากต้องการให้ผู้ใช้ออกจากระบบ ให้เรียกใช้ signOut

Kotlin

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();