ตรวจสอบสิทธิ์ด้วย Firebase โดยใช้ลิงก์อีเมลใน Android

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

การลงชื่อเข้าใช้ทางอีเมลมีประโยชน์หลายประการดังนี้

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

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

ตั้งค่าโปรเจ็กต์ Android

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

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

    นอกจากนี้ ในฐานะที่เป็นส่วนหนึ่งของการตั้งค่าการตรวจสอบสิทธิ์ Firebase คุณจะต้องเพิ่ม SDK ของบริการ Google Play ลงในแอปของคุณ

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.2"))
    
        // 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")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0")
    }

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

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

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

    โปรดทราบว่าหากคุณใช้ไลบรารี 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:23.0.0")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0")
    }
    หากกำลังมองหาโมดูลไลบรารีสำหรับ Kotlin โดยเฉพาะ จะเริ่มต้นใน ตุลาคม 2023 (Firebase BoM 32.5.0) ทั้งนักพัฒนาซอฟต์แวร์ Kotlin และ Java สามารถ ขึ้นอยู่กับโมดูลไลบรารีหลัก (ดูรายละเอียดได้ที่ คําถามที่พบบ่อยเกี่ยวกับโครงการริเริ่มนี้)

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

  1. ในคอนโซล Firebase ให้เปิดส่วนการตรวจสอบสิทธิ์
  2. ในแท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้ผู้ให้บริการอีเมล/รหัสผ่าน หมายเหตุ ต้องเปิดใช้การลงชื่อเข้าใช้อีเมล/รหัสผ่านเพื่อใช้การลงชื่อเข้าใช้ลิงก์อีเมล
  3. ในส่วนเดียวกัน ให้เปิดใช้การลงชื่อเข้าใช้ลิงก์อีเมล (การลงชื่อเข้าใช้แบบไม่ต้องใช้รหัสผ่าน)
  4. คลิกบันทึก

ในการเริ่มต้นขั้นตอนการตรวจสอบสิทธิ์ ให้แสดงอินเทอร์เฟซที่ผู้ใช้ แจ้งให้ผู้ใช้ให้ที่อยู่อีเมลของตนแล้วโทร sendSignInLinkToEmail เพื่อขอให้ Firebase ส่งลิงก์การตรวจสอบสิทธิ์ให้ อีเมลของผู้ใช้

  1. สร้าง ActionCodeSettings ซึ่งบอกวิธีการสร้าง ลิงก์อีเมล ตั้งค่าฟิลด์ต่อไปนี้

    • url: Deep Link ที่จะฝังและสถานะเพิ่มเติมที่จะส่งต่อ โดเมนของลิงก์ต้องได้รับอนุญาตพิเศษในรายการคอนโซล Firebase ของ โดเมนที่ได้รับอนุญาต ซึ่งสามารถค้นหาได้โดยไปที่แท็บวิธีการลงชื่อเข้าใช้ (การตรวจสอบสิทธิ์ -> วิธีการลงชื่อเข้าใช้) ลิงก์จะเปลี่ยนเส้นทางผู้ใช้ไปที่ URL นี้หากไม่มีการติดตั้งแอปในอุปกรณ์และแอป ที่สามารถติดตั้งได้
    • androidPackageName และ IOSBundleId: แอปที่จะใช้เมื่อลงชื่อเข้าใช้ มีการเปิดในอุปกรณ์ Android หรือ Apple ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธี กำหนดค่าลิงก์แบบไดนามิกของ Firebase เพื่อเปิดลิงก์การดำเนินการอีเมลผ่านแอปบนอุปกรณ์เคลื่อนที่
    • handleCodeInApp: ตั้งค่าเป็น "จริง" การลงชื่อเข้าใช้จะต้องเป็นแบบต่อไปนี้เสมอ ดำเนินการในแอป ซึ่งแตกต่างจากการดำเนินการอื่นๆ ทางอีเมลนอกกลุ่ม (รหัสผ่าน การรีเซ็ตและการยืนยันอีเมล) เพราะว่าเมื่อจบขั้นตอนแล้ว ผู้ใช้ต้องลงชื่อเข้าใช้และสถานะการตรวจสอบสิทธิ์ยังคงอยู่ใน แอปนั้น
    • dynamicLinkDomain: เมื่อมีการกำหนดโดเมนลิงก์แบบไดนามิกที่กำหนดเองหลายโดเมน สำหรับโปรเจ็กต์ ให้ระบุลิงก์ที่จะใช้เมื่อเปิดลิงก์ผ่าน แอปบนอุปกรณ์เคลื่อนที่ที่ระบุ (เช่น example.page.link) มิฉะนั้น โดเมนแรกจะถูกเลือกโดยอัตโนมัติ

    Kotlin+KTX

    val actionCodeSettings = actionCodeSettings {
        // URL you want to redirect back to. The domain (www.example.com) for this
        // URL must be whitelisted in the Firebase Console.
        url = "https://www.example.com/finishSignUp?cartId=1234"
        // This must be true
        handleCodeInApp = true
        setIOSBundleId("com.example.ios")
        setAndroidPackageName(
            "com.example.android",
            true, // installIfNotAvailable
            "12", // minimumVersion
        )
    }

    Java

    ActionCodeSettings actionCodeSettings =
            ActionCodeSettings.newBuilder()
                    // URL you want to redirect back to. The domain (www.example.com) for this
                    // URL must be whitelisted in the Firebase Console.
                    .setUrl("https://www.example.com/finishSignUp?cartId=1234")
                    // This must be true
                    .setHandleCodeInApp(true)
                    .setIOSBundleId("com.example.ios")
                    .setAndroidPackageName(
                            "com.example.android",
                            true, /* installIfNotAvailable */
                            "12"    /* minimumVersion */)
                    .build();

    ดูข้อมูลเพิ่มเติมเกี่ยวกับ ActionCodeSettings ได้ที่ สถานะการส่งในการดำเนินการอีเมล

  2. ขออีเมลของผู้ใช้

  3. ส่งลิงก์การตรวจสอบสิทธิ์ไปยังอีเมลของผู้ใช้ แล้วบันทึกอีเมลของผู้ใช้ ในกรณีที่ผู้ใช้ลงชื่อเข้าใช้ด้วยอีเมลในอุปกรณ์เดียวกันจนเสร็จสิ้น

    Kotlin+KTX

    Firebase.auth.sendSignInLinkToEmail(email, actionCodeSettings)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Email sent.")
            }
        }

    Java

    FirebaseAuth auth = FirebaseAuth.getInstance();
    auth.sendSignInLinkToEmail(email, actionCodeSettings)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "Email sent.");
                    }
                }
            });

ข้อกังวลด้านความปลอดภัย

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

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

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

และโปรดใช้ HTTPS URL ในการใช้งานจริง เพื่อหลีกเลี่ยงการใช้ลิงก์ เซิร์ฟเวอร์ตัวกลางอาจดักจับได้

การลงชื่อเข้าใช้ในแอป Android ให้เสร็จสมบูรณ์

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

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

  1. เปิดใช้ลิงก์แบบไดนามิกของ Firebase:

    1. ในคอนโซล Firebase ให้เปิดส่วนลิงก์แบบไดนามิก
    2. หากคุณยังไม่ได้ยอมรับข้อกำหนดลิงก์แบบไดนามิกและสร้างลิงก์แบบไดนามิกแล้ว โดเมน ให้ดำเนินการในขณะนี้

      หากคุณสร้างโดเมนลิงก์แบบไดนามิกไว้แล้ว โปรดจดบันทึกไว้ ลิงก์แบบไดนามิก โดเมนมักจะมีลักษณะดังตัวอย่างต่อไปนี้

      example.page.link

      คุณจะต้องใช้ค่านี้เมื่อกำหนดค่าแอป Apple หรือ Android เป็น สกัดกั้นลิงก์ขาเข้า

  2. การกำหนดค่าแอปพลิเคชัน Android

    1. ในการจัดการลิงก์เหล่านี้จากแอปพลิเคชัน Android ของคุณ ต้องระบุชื่อแพ็กเกจ Android ในคอนโซล Firebase การตั้งค่าโปรเจ็กต์ นอกจากนี้ SHA-1 และ SHA-256 ของแอปพลิเคชัน ต้องระบุใบรับรอง
    2. เมื่อคุณได้เพิ่มโดเมนลิงก์แบบไดนามิก และตรวจสอบว่า แอป Android กำหนดค่าถูกต้อง ลิงก์แบบไดนามิกจะเปลี่ยนเส้นทางไปยัง แอปพลิเคชันของคุณ โดยเริ่มจากกิจกรรมของ Launcher
    3. หากคุณต้องการให้ลิงก์แบบไดนามิก เปลี่ยนเส้นทางไปยังกิจกรรมเฉพาะ จะต้องกำหนดค่าตัวกรอง Intent ใน AndroidManifest.xml ซึ่งทำได้โดยการระบุโดเมนลิงก์แบบไดนามิกหรือ เครื่องจัดการการดำเนินการกับอีเมลในตัวกรอง Intent โดยค่าเริ่มต้น อีเมล เครื่องจัดการการดำเนินการโฮสต์อยู่บนโดเมนดังตัวอย่างต่อไปนี้
      PROJECT_ID.firebaseapp.com/
    4. ข้อควรระวัง
      1. อย่าระบุ URL ที่คุณตั้งค่าไว้ใน actionCodeSettings ใน Intent
      2. เมื่อสร้างโดเมนลิงก์แบบไดนามิกแล้ว คุณอาจสร้าง ลิงก์ URL แบบสั้น ระบบจะไม่ส่ง URL แบบสั้นนี้ อย่า กำหนดค่าตัวกรอง Intent เพื่อตรวจจับด้วย android:pathPrefix ซึ่งหมายความว่าคุณจะ ก็จะไม่สามารถตรวจจับลิงก์แบบไดนามิกในส่วนต่างๆ ของ แอปพลิเคชันของคุณ อย่างไรก็ตาม คุณสามารถตรวจสอบพารามิเตอร์การค้นหา mode ได้ ในลิงก์เพื่อดูว่าการดำเนินการใดกำลังดำเนินการอยู่ หรือ ใช้เมธอด SDK เช่น isSignInWithEmailLink เพื่อดูว่า ลิงก์ที่แอปของคุณได้รับจะทําสิ่งที่คุณต้องการ
    5. หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการรับลิงก์แบบไดนามิก โปรดดู การรับวิธีการเกี่ยวกับลิงก์แบบไดนามิกของ Android

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

Kotlin+KTX

val auth = Firebase.auth
val intent = intent
val emailLink = intent.data.toString()

// Confirm the link is a sign-in with email link.
if (auth.isSignInWithEmailLink(emailLink)) {
    // Retrieve this from wherever you stored it
    val email = "someemail@domain.com"

    // The client SDK will parse the code from the link for you.
    auth.signInWithEmailLink(email, emailLink)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Successfully signed in with email link!")
                val result = task.result
                // You can access the new user via result.getUser()
                // Additional user info profile *not* available via:
                // result.getAdditionalUserInfo().getProfile() == null
                // You can check if the user is new or existing:
                // result.getAdditionalUserInfo().isNewUser()
            } else {
                Log.e(TAG, "Error signing in with email link", task.exception)
            }
        }
}

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
Intent intent = getIntent();
String emailLink = intent.getData().toString();

// Confirm the link is a sign-in with email link.
if (auth.isSignInWithEmailLink(emailLink)) {
    // Retrieve this from wherever you stored it
    String email = "someemail@domain.com";

    // The client SDK will parse the code from the link for you.
    auth.signInWithEmailLink(email, emailLink)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "Successfully signed in with email link!");
                        AuthResult result = task.getResult();
                        // You can access the new user via result.getUser()
                        // Additional user info profile *not* available via:
                        // result.getAdditionalUserInfo().getProfile() == null
                        // You can check if the user is new or existing:
                        // result.getAdditionalUserInfo().isNewUser()
                    } else {
                        Log.e(TAG, "Error signing in with email link", task.getException());
                    }
                }
            });
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีลงชื่อเข้าใช้ด้วยลิงก์อีเมลใน Apple ได้ โปรดดูคู่มือแพลตฟอร์ม Apple

ดูข้อมูลเกี่ยวกับวิธีจัดการการลงชื่อเข้าใช้ด้วยลิงก์อีเมลในเว็บ โปรดดูคู่มือเว็บ

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

ความแตกต่างจะอยู่ในครึ่งหลังของการดำเนินการ:

Kotlin+KTX

// Construct the email link credential from the current URL.
val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink)

// Link the credential to the current user.
Firebase.auth.currentUser!!.linkWithCredential(credential)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Successfully linked emailLink credential!")
            val result = task.result
            // You can access the new user via result.getUser()
            // Additional user info profile *not* available via:
            // result.getAdditionalUserInfo().getProfile() == null
            // You can check if the user is new or existing:
            // result.getAdditionalUserInfo().isNewUser()
        } else {
            Log.e(TAG, "Error linking emailLink credential", task.exception)
        }
    }

Java

// Construct the email link credential from the current URL.
AuthCredential credential =
        EmailAuthProvider.getCredentialWithLink(email, emailLink);

// Link the credential to the current user.
auth.getCurrentUser().linkWithCredential(credential)
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Successfully linked emailLink credential!");
                    AuthResult result = task.getResult();
                    // You can access the new user via result.getUser()
                    // Additional user info profile *not* available via:
                    // result.getAdditionalUserInfo().getProfile() == null
                    // You can check if the user is new or existing:
                    // result.getAdditionalUserInfo().isNewUser()
                } else {
                    Log.e(TAG, "Error linking emailLink credential", task.getException());
                }
            }
        });

นอกจากนี้ยังใช้ตรวจสอบสิทธิ์ผู้ใช้ลิงก์อีเมลอีกครั้งก่อนที่จะเรียกใช้ การดำเนินการที่มีความละเอียดอ่อน

Kotlin+KTX

// Construct the email link credential from the current URL.
val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink)

// Re-authenticate the user with this credential.
Firebase.auth.currentUser!!.reauthenticateAndRetrieveData(credential)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            // User is now successfully reauthenticated
        } else {
            Log.e(TAG, "Error reauthenticating", task.exception)
        }
    }

Java

// Construct the email link credential from the current URL.
AuthCredential credential =
        EmailAuthProvider.getCredentialWithLink(email, emailLink);

// Re-authenticate the user with this credential.
auth.getCurrentUser().reauthenticateAndRetrieveData(credential)
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // User is now successfully reauthenticated
                } else {
                    Log.e(TAG, "Error reauthenticating", task.getException());
                }
            }
        });

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

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

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

ดูเอกสารเกี่ยวกับการป้องกันการแจกแจงอีเมล เพื่อดูรายละเอียดเพิ่มเติม

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

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

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

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

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

หากต้องการนำผู้ใช้ออกจากระบบ โปรดโทร signOut

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();