Firebase Auth เป็นบริการคลาวด์ของ Google สำหรับการยืนยันตัวตนผู้ใช้ในแอปพลิเคชันมือถือและเว็บ โดยมีวิธีการเข้าสู่ระบบพร้อมใช้งานผ่านอีเมล โทรศัพท์ และเครือข่ายสังคม SDK จัดการวงจรชีวิตเซสชันทั้งหมด: การลงทะเบียน การเข้าสู่ระบบ การรีเฟรชโทเคน และการออกจากระบบ ตามข้อมูลจาก Google, 2026 Firebase Auth รองรับผู้ให้บริการยืนยันตัวตนมากกว่า 10 รายพร้อมใช้งานทันที บริการนี้ให้บริการฟรีโดยไม่จำกัดจำนวนผู้ใช้ที่ยืนยันตัวตนแล้ว
ประเด็นสำคัญ
Firebase Auth เป็นบริการยืนยันตัวตนแบ็กเอนด์ของ Google ที่ให้มาเป็นส่วนหนึ่งของ Firebase SDK มันจัดการตรรกะการจัดการบัญชีฝั่งเซิร์ฟเวอร์ทั้งหมด: การจัดเก็บแฮชรหัสผ่าน การสร้างโทเคน JWT และการประมวลผลโฟลว์ OAuth 2.0 และ OpenID Connect นักพัฒนาไม่จำเป็นต้องปรับใช้เซิร์ฟเวอร์ยืนยันตัวตนของตนเอง จัดการโทเคนรีเฟรช หรือใช้โปรโตคอลการตรวจสอบ — Firebase ทำทุกอย่าง
Firebase Auth ใช้สถาปัตยกรรมแบบสหพันธ์กับพื้นที่จัดเก็บผู้ใช้แบบรวม ผู้ใช้แต่ละคนจะได้รับตัวระบุเฉพาะ (UID) ที่ไม่ขึ้นอยู่กับผู้ให้บริการเข้าสู่ระบบ เมื่อลงทะเบียนผ่าน Google และอีเมล จะสร้างผู้ใช้คนเดียวที่มีบัญชีที่เชื่อมโยงสองบัญชี (ผู้ให้บริการ) Firebase จัดการการเชื่อมโยงบัญชีฝั่งไคลเอ็นต์โดยอัตโนมัติโดยไม่ต้องร้องขอไปยังเซิร์ฟเวอร์เพิ่มเติม
โทเคน Firebase Auth คือ JWT (JSON Web Token) ที่มีเพย์โหลดประกอบด้วย UID เวลาที่ออก เวลาหมดอายุ และ claims ที่กำหนดเอง โทเคนการเข้าถึงมีอายุ 1 ชั่วโมง โทเคนรีเฟรชไม่จำกัด (แต่สามารถเพิกถอนได้ผ่านคอนโซลผู้ดูแลระบบ) SDK จะรีเฟรชโทเคนโดยอัตโนมัติทุกครั้งที่มีคำขอ HTTP ไปยังบริการ Firebase ตามข้อมูลของ Google (2026) Firebase Auth จัดการการยืนยันตัวตนมากกว่า 500 ล้านครั้งต่อวัน
Firebase Auth ฟรีอย่างสมบูรณ์บนแผน Spark (ฟรี) และแผน Blaze (จ่ายตามการใช้งาน) ข้อจำกัดเดียวคือการยืนยันตัวตนแบบไม่ระบุชื่อ 1 หมื่นครั้งต่อวันบน Spark (ไม่จำกัดบน Blaze) การยืนยันตัวตนทางอีเมล/โทรศัพท์และ OAuth ไม่มีข้อจำกัด สำหรับการตรวจสอบทางโทรศัพท์ Spark ให้การตรวจสอบ 1 หมื่นครั้งต่อเดือน ในขณะที่ Blaze คิดค่าบริการตามการใช้งาน ($0.01 ต่อการตรวจสอบหลังจาก 1 หมื่นครั้งแรก) ทำให้ Firebase Auth เป็นหนึ่งในโซลูชันที่คุ้มค่าที่สุดในตลาด
Firebase Auth รองรับผู้ให้บริการยืนยันตัวตน 12 รายพร้อมใช้งานทันที ผู้ให้บริการแต่ละรายถูกนำไปใช้เป็นบริการระบุตัวตนแยกต่างหากกับโฟลว์ที่กำหนดไว้ล่วงหน้า — นักพัฒนาเพียงแค่สร้างออบเจกต์ Credential และส่งไปยัง signInWithCredential Firebase จะกำหนดโดยอัตโนมัติว่าผู้ใช้เป็นผู้ใช้ใหม่หรือที่มีอยู่แล้ว และในกรณีที่อีเมลซ้ำกัน จะเสนอให้เชื่อมโยงบัญชี
Email/Password เป็นวิธีการยืนยันตัวตนพื้นฐานด้วยการจัดเก็บแฮชรหัสผ่าน (bcrypt) บนเซิร์ฟเวอร์ Firebase รองรับการลงทะเบียน การเข้าสู่ระบบ การรีเซ็ตรหัสผ่านทางอีเมล และการยืนยันอีเมล Firebase จะตรวจสอบความแข็งแกร่งของรหัสผ่านโดยอัตโนมัติ (ขั้นต่ำ 6 อักขระ) และสามารถบล็อกการเข้าสู่ระบบหลังจากพยายามไม่สำเร็จ N ครั้ง (การป้องกันแบบบรูทฟอร์ซ)
Google, Apple, Facebook, Twitter, Microsoft, Yahoo, GitHub — ผู้ให้บริการ OAuth 2.0 ทั้งหมดสามารถกำหนดค่าผ่านคอนโซล Firebase ได้ใน 5 นาที สำหรับผู้ให้บริการแต่ละราย คุณต้องได้รับ Client ID และ Client Secret จากคอนโซลของผู้ให้บริการนั้น Apple Sign In เป็นข้อบังคับสำหรับแอปพลิเคชัน App Store (ข้อกำหนดของ Apple ตั้งแต่ปี 2020) Firebase Auth รองรับโฟลว์ Apple Sign In อย่างสมบูรณ์ด้วยการตรวจสอบ JWT
| ผู้ให้บริการ | โปรโตคอล | ต้องใช้ Client Secret |
|---|---|---|
| OAuth 2.0 | ไม่ | |
| Apple | OAuth 2.0 + OpenID | ใช่ |
| OAuth 2.0 | ใช่ | |
| OAuth 1.0a | ใช่ | |
| GitHub | OAuth 2.0 | ใช่ |
Phone Auth คือการยืนยันตัวตนผ่านรหัส SMS ที่ส่งไปยังหมายเลขโทรศัพท์ของผู้ใช้ Firebase ใช้ Silent APN (iOS) หรือ SMS Retriever API (Android) เพื่ออ่านรหัสโดยอัตโนมัติโดยไม่ต้องป้อนจากแป้นพิมพ์ บน Android SMS Retriever API ทำงานเฉพาะบนอุปกรณ์ที่มี Google Play Services สำหรับภูมิภาคที่ไม่มี SMS Firebase รองรับการตรวจสอบ reCAPTCHA เป็นวิธีสำรอง การยืนยันตัวตนทางโทรศัพท์มีความสำคัญสำหรับแอปพลิเคชันที่ต้องผูกหมายเลขโทรศัพท์ — การจัดส่งอาหาร การเรียกแท็กซี่ ธนาคาร
การเพิ่ม Firebase Auth บน Android ต้องการเพิ่มการพึ่งพา firebase-auth-ktx ใน build.gradle และเริ่มต้น Firebase App (ดำเนินการโดยอัตโนมัติผ่านปลั๊กอิน Google Services) จากนั้นออบเจกต์ FirebaseAuth จะพร้อมใช้งานผ่านเมธอดสแตติก getInstance() — ซิงเกิลตันสำหรับทั้งแอปพลิเคชัน ไม่จำเป็นต้องกำหนดค่าเพิ่มเติม
// build.gradle (app-level)
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-auth-ktx")
implementation("com.google.android.gms:play-services-auth:21.0.0")
}
createUserWithEmailAndPassword เป็นเมธอดหลักสำหรับการลงทะเบียน มันรับอีเมลและรหัสผ่าน สร้างผู้ใช้ใน Firebase Auth และส่งคืนออบเจกต์ AuthResult พร้อม UID หากมีผู้ใช้ที่มีอีเมลนี้อยู่แล้ว Firebase จะส่งคืนข้อผิดพลาด ERROR_EMAIL_ALREADY_IN_USE หลังจากการลงทะเบียนสำเร็จ SDK จะบันทึกโทเคนใน SharedPreferences โดยอัตโนมัติและกู้คืนเซสชันเมื่อเปิดแอปครั้งต่อไปโดยไม่ต้องเรียก signIn
class AuthViewModel {
private val auth = FirebaseAuth.getInstance()
suspend fun register(email: String, password: String): Result<User> {
return try {
val result = auth.createUserWithEmailAndPassword(email, password).await()
Result.success(result.user?.toUser() ?: throw Exception("User is null"))
} catch (e: FirebaseAuthException) {
Result.failure(e)
}
}
}
สำหรับ Google Sign In จะใช้กระบวนการสองขั้นตอน: การรับ ID Token ผ่าน Credential Manager (Android) หรือ Google Sign-In SDK จากนั้นส่งโทเคนไปยังข้อมูลประจำตัวของ Firebase Firebase ตรวจสอบโทเคนบนเซิร์ฟเวอร์ของตน (ตรวจสอบลายเซ็นด้วยคีย์ RSA ของ Google) และสร้างหรือส่งคืนผู้ใช้ที่มีอยู่ กระบวนการนี้ไม่จำเป็นต้องจัดเก็บความลับบนไคลเอ็นต์ — การยืนยันตัวตนทั้งหมดทำผ่านการตรวจสอบโทเคนแบบเข้ารหัส
Firebase Auth จัดการวงจรชีวิตเซสชันโดยอัตโนมัติ หลังจากเข้าสู่ระบบ SDK จะบันทึกโทเคนรีเฟรชในพื้นที่จัดเก็บในเครื่อง และทุกครั้งที่เริ่มต้นแอปใหม่ จะกู้คืนเซสชันผ่านการเข้าสู่ระบบแบบเงียบ นักพัฒนาไม่จำเป็นต้องใช้พื้นที่จัดเก็บโทเคน การจัดการวันหมดอายุ หรือการรีเฟรช — Firebase Auth SDK ทำทุกอย่าง
FirebaseAuth.getInstance().currentUser ส่งคืนออบเจกต์ FirebaseUser หากเซสชันทำงานอยู่ หรือ null หากผู้ใช้ออกจากระบบ FirebaseUser ประกอบด้วย UID, อีเมล, displayName, photoUrl, phoneNumber, providerData และรายการ claims หลังจากอัปเดตโปรไฟล์ (updateProfile) การเปลี่ยนแปลงจะซิงค์กับเซิร์ฟเวอร์โดยอัตโนมัติ ออบเจกต์ FirebaseUser ถูกแคชในหน่วยความจำและอัปเดตทุกครั้งที่มีการดำเนินการยืนยันตัวตน
signInAnonymously สร้างผู้ใช้ชั่วคราวโดยไม่ต้องลงทะเบียน ผู้ใช้ที่ไม่ระบุชื่อมี UID แต่ไม่มีอีเมล ชื่อ หรือผู้ให้บริการ ซึ่งมีประโยชน์สำหรับแอปพลิเคชันที่เนื้อหาพร้อมใช้งานก่อนการลงทะเบียน (ตะกร้า รายการโปรด ประวัติ) เมื่อผู้ใช้ตัดสินใจลงทะเบียน บัญชีที่ไม่ระบุชื่อจะเชื่อมโยงกับบัญชีถาวรผ่าน linkWithCredential บนแผน Spark มีข้อจำกัด 1 หมื่นการยืนยันตัวตนแบบไม่ระบุชื่อต่อวัน
ตามข้อมูลของ Google (2026) ประมาณ 40% ของผู้ใช้เริ่มใช้แอปพลิเคชันโดยไม่ระบุชื่อ และ 25% ของพวกเขาเชื่อมโยงบัญชีที่ไม่ระบุชื่อกับบัญชีถาวรในภายหลัง ซึ่งหมายความว่าการยืนยันตัวตนแบบไม่ระบุชื่อจะไม่สูญเสียข้อมูลเมื่อแปลงผู้ใช้เป็นผู้ใช้ที่ลงทะเบียนแล้ว
เมธอด signOut() ล้างเซสชันในเครื่องและลบโทเคนที่บันทึกไว้ หลังจากเรียก signOut แล้ว currentUser จะกลายเป็น null เมธอด delete() จะลบบัญชีผู้ใช้ออกจาก Firebase Auth อย่างสมบูรณ์ — ผู้ให้บริการที่เชื่อมโยงทั้งหมดถูกตัดการเชื่อมต่อและการเข้าถึงบริการ Firebase ถูกบล็อก การลบผู้ใช้ไม่สามารถย้อนกลับได้และต้องมีการยืนยันตัวตนอีกครั้งเพื่อป้องกันการลบบัญชีโดยไม่ได้รับอนุญาต
Custom Claims เป็นแอตทริบิวต์ที่กำหนดเองที่ Firebase Auth เพิ่มลงในโทเคน JWT ของผู้ใช้ ซึ่งแตกต่างจากฟิลด์โปรไฟล์มาตรฐาน (อีเมล, displayName) claims จะพร้อมใช้งานเฉพาะฝั่งเซิร์ฟเวอร์ — ผ่าน Admin SDK หรือผ่านกฎใน Firebase Security Rules สำหรับ Firestore และ Realtime Database Claims ไม่สามารถมองเห็นได้โดยตรงกับไคลเอ็นต์ แต่สามารถอ่านได้ผ่าน user.getIdTokenResult()
บทบาทและสิทธิ์การเข้าถึง เป็นกรณีการใช้งานทั่วไปที่สุดของ claims Admin SDK อนุญาตให้กำหนดบทบาท “admin” “moderator” หรือ “premium_user” ผ่านแผนที่บนเซิร์ฟเวอร์ claims เหล่านี้จะถูกรวมอยู่ในโทเคนโดยอัตโนมัติและสามารถใช้ใน Firestore Security Rules เพื่อควบคุมการเข้าถึง ตามข้อมูลของ Google (2026) 65% ของโครงการ Firebase ใช้ claims ที่กำหนดเองสำหรับการจัดการการเข้าถึงข้อมูลแทนเซิร์ฟเวอร์บทบาทแยกต่างหาก
// Admin SDK (Node.js) — การกำหนด claims ให้ผู้ใช้
const admin = require("firebase-admin")
await admin.auth().setCustomUserClaims(uid, {
role: "premium",
tier: "pro",
maxProjects: 50
})
// การอ่าน claims บนไคลเอ็นต์
val claims = FirebaseAuth.getInstance()
.currentUser?.getIdTokenResult(true)
?.await()?.claims
Claims ที่กำหนดเอง มีข้อจำกัด: สูงสุด 1,000 ไบต์สำหรับออบเจกต์ JSON claims ทั้งหมดต่อผู้ใช้ ไม่เกิน 20 คีย์ในออบเจกต์ claims ไม่ได้ออกแบบมาสำหรับจัดเก็บข้อมูลแบบไดนามิก — จะอัปเดตผ่าน Admin SDK เท่านั้นและไม่ซิงค์แบบเรียลไทม์ หลังจากอัปเดต claims ผู้ใช้ต้องรีเฟรชโทเคน (getIdTokenResult(true)) หรือเข้าสู่ระบบแอปอีกครั้ง claims ไม่ได้ถูกแคชบนไคลเอ็นต์ — การเข้าสู่ระบบใหม่แต่ละครั้งจะได้รับโทเคนที่อัปเดตจากเซิร์ฟเวอร์
Firebase Auth ใช้การป้องกันบัญชีหลายระดับ: การเข้ารหัสการรับส่งข้อมูล (TLS 1.3) การแฮชรหัสผ่าน (bcrypt ต้นทุน 10) การป้องกันแบบบรูทฟอร์ซด้วย Adaptive Pricing (การชะลอการตอบสนองโดยอัตโนมัติเมื่อมีกิจกรรมที่น่าสงสัย) และการรวม reCAPTCHA สำหรับการเข้าสู่ระบบเว็บ นอกจากนี้ Firebase Auth จะปิดการใช้งานบัญชีเมื่อมีกิจกรรมที่น่าสงสัย — การเข้าสู่ระบบจำนวนมากจาก IP ที่แตกต่างกัน การพยายามเข้าสู่ระบบด้วยรหัสผ่านที่ไม่ถูกต้อง และที่อยู่อีเมลที่น่าสงสัย
Account Lockout — การล็อกบัญชีอัตโนมัติหลังจากพยายามเข้าสู่ระบบไม่สำเร็จตามจำนวนที่กำหนด เกณฑ์สามารถกำหนดค่าได้ในคอนโซล Firebase (ค่าเริ่มต้นคือ 10 ครั้ง) Email Enumeration Protection — การป้องกันการนับที่อยู่อีเมล เมื่อเปิดใช้งาน Firebase จะส่งคืนข้อผิดพลาดเดียวกันทั้งสำหรับอีเมลที่มีอยู่และไม่มีอยู่ Trusted Domains — การจำกัดการเข้าสู่ระบบเฉพาะผู้ใช้ที่มีโดเมนอีเมลที่ระบุในการตั้งค่า
สามารถสร้างการยืนยันตัวตนที่กำหนดเองเพิ่มเติมได้โดยใช้ Custom Tokens — JWT ที่ลงนามโดยบัญชีบริการ Firebase ไคลเอ็นต์ส่งโทเคนที่กำหนดเองไปยัง signInWithCustomToken() Firebase ตรวจสอบลายเซ็นและสร้างเซสชัน ซึ่งช่วยให้รวม Firebase Auth เข้ากับการยืนยันตัวตนฝั่งเซิร์ฟเวอร์ที่มีอยู่ (เช่น เซิร์ฟเวอร์ OAuth 2.0 ของคุณเอง) โดยไม่ต้องทำซ้ำฐานข้อมูลผู้ใช้ โทเคนมีอายุ 1 ชั่วโมง หลังจากนั้น SDK จะรีเฟรชเซสชันโดยอัตโนมัติผ่านโทเคนรีเฟรชของ Firebase
คำถามที่พบบ่อย
Firebase Auth ฟรีอย่างสมบูรณ์สำหรับผู้ให้บริการทั้งหมดทั้งในแผน Spark และ Blaze ข้อจำกัด: 1 หมื่นการลงทะเบียนแบบไม่ระบุชื่อต่อวัน (Spark) และ 1 หมื่นการตรวจสอบ SMS ต่อเดือน (Spark)
ใช้ linkWithCredential — เมธอดที่เชื่อมโยงผู้ให้บริการใหม่กับผู้ใช้ที่ไม่ระบุชื่อหรือผู้ใช้อีเมลปัจจุบัน ผู้ใช้เข้าสู่ระบบผ่าน Google จากนั้นเชื่อมโยงอีเมลของตนผ่าน linkWithCredential
Firebase Auth ต้องใช้อินเทอร์เน็ตสำหรับการเข้าสู่ระบบ แต่แคชเซสชันไว้ในเครื่อง หลังจากเข้าสู่ระบบ แอปจะทำงานในโหมดออฟไลน์จนกว่าจะต้องรีเฟรชโทเคน (ทุก 1 ชั่วโมง)
ในคอนโซล Firebase ไปที่ส่วน Authentication ค้นหาผู้ใช้และคลิก “Revoke Tokens” เซสชันผู้ใช้ที่ใช้งานอยู่ทั้งหมดจะไม่ถูกต้องภายใน 30 นาที
การลบบัญชี ผ่านคอนโซลหรือ Admin SDK จะบล็อกการเข้าถึงบริการ Firebase ทั้งหมดทันที โทเคนหยุดทำงาน ข้อมูลใน Firestore, Realtime Database และ Storage จะไม่ถูกลบโดยอัตโนมัติ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม