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

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

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

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

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

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

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

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

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

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.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")
    // 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 ซึ่งให้คำแนะนำในการสร้างลิงก์อีเมลแก่ Firebase ตั้งค่าช่องต่อไปนี้

    • url: Deep Link ที่จะฝังและสถานะเพิ่มเติมที่จะส่งต่อ โดเมนของลิงก์ต้องอยู่ในรายการที่อนุญาตในรายการคอนโซล Firebase ของโดเมนที่ได้รับอนุญาต ซึ่งดูได้โดยไปที่แท็บวิธีการลงชื่อเข้าใช้ (การตรวจสอบสิทธิ์ -> วิธีลงชื่อเข้าใช้) ลิงก์จะเปลี่ยนเส้นทางผู้ใช้ไปยัง URL นี้หากแอปไม่ได้ติดตั้งไว้ในอุปกรณ์และติดตั้งแอปไม่ได้
    • androidPackageName และ IOSBundleId: แอปที่จะใช้เมื่อลิงก์ลงชื่อเข้าใช้เปิดอยู่ในอุปกรณ์ Android หรือ Apple ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธี กำหนดค่าลิงก์แบบไดนามิกของ Firebase เพื่อเปิดลิงก์การดำเนินการอีเมลผ่านแอปบนอุปกรณ์เคลื่อนที่
    • handleCodeInApp: ตั้งค่าเป็น true การลงชื่อเข้าใช้จะต้องเสร็จสมบูรณ์ในแอปเสมอ ซึ่งแตกต่างจากการดำเนินการอื่นๆ กับอีเมลที่ไม่ใช่กลุ่มอีเมล (รีเซ็ตรหัสผ่านและการยืนยันอีเมล) เพราะในตอนท้ายของขั้นตอนนี้ ผู้ใช้ต้องลงชื่อเข้าใช้อยู่และสถานะการตรวจสอบสิทธิ์จะยังคงอยู่ภายในแอป
    • 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 Auth ใช้ลิงก์แบบไดนามิกของ Firebase เมื่อส่งลิงก์ที่ตั้งใจจะเปิดในแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ หากต้องการใช้ฟีเจอร์นี้ คุณต้องกำหนดค่าลิงก์แบบไดนามิกในคอนโซล Firebase

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

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

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

      example.page.link

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

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

    1. คุณต้องระบุชื่อแพ็กเกจ Android ในการตั้งค่าโปรเจ็กต์คอนโซล Firebase เพื่อจัดการลิงก์เหล่านี้จากแอปพลิเคชัน Android นอกจากนี้ คุณยังต้องระบุ 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 = "[email protected]"

    // 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 = "[email protected]";

    // 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 โปรดดูที่ จัดการผู้ใช้

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

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

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();