คุณสามารถใช้ Firebase Authentication เพื่ออนุญาตให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้อีเมลและรหัสผ่าน รวมถึงจัดการบัญชีที่อิงตามรหัสผ่านของแอป
ก่อนเริ่มต้น
ใช้ Swift Package Manager เพื่อติดตั้งและจัดการทรัพยากร Dependency ของ Firebase
- เปิดโปรเจ็กต์แอปใน Xcode แล้วไปที่ไฟล์ > เพิ่มแพ็กเกจ
- เมื่อได้รับข้อความแจ้ง ให้เพิ่มที่เก็บ Firebase SDK สําหรับแพลตฟอร์ม Apple ดังนี้
- เลือกไลบรารี Firebase Authentication
- เพิ่ม Flag
-ObjC
ลงในส่วน Other Linker Flags ของการตั้งค่าบิลด์เป้าหมาย - เมื่อเสร็จแล้ว Xcode จะเริ่มแก้ปัญหาและดาวน์โหลด ทรัพยากร Dependency ในเบื้องหลัง
https://github.com/firebase/firebase-ios-sdk.git
ถัดไป ให้ทำตามขั้นตอนการกําหนดค่าต่อไปนี้
- หากยังไม่ได้เชื่อมต่อแอปกับโปรเจ็กต์ Firebase ให้ดำเนินการจาก คอนโซล Firebase
- เปิดใช้การลงชื่อเข้าใช้ด้วยอีเมล/รหัสผ่าน
- ในคอนโซล Firebase ให้เปิด ส่วน Auth
- ในแท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้วิธีการลงชื่อเข้าใช้อีเมล/รหัสผ่าน แล้วคลิกบันทึก
สร้างบัญชีที่ใช้รหัสผ่าน
หากต้องการสร้างบัญชีผู้ใช้ใหม่ด้วยรหัสผ่าน ให้ทำตามขั้นตอนต่อไปนี้ใน กิจกรรมการลงชื่อเข้าใช้ของแอป
- นําเข้าโมดูล
FirebaseCore
ในUIApplicationDelegate
รวมถึงโมดูล Firebase อื่นๆ ที่ผู้รับมอบสิทธิ์ของแอปใช้ ตัวอย่างเช่น หากต้องการใช้ Cloud Firestore และ Authentication:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- กําหนดค่า
FirebaseApp
อินสแตนซ์ที่แชร์ใน เมธอดapplication(_:didFinishLaunchingWithOptions:)
:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- หากใช้ SwiftUI คุณต้องสร้างการมอบสิทธิ์แอปพลิเคชันและแนบการมอบสิทธิ์
ไปยังโครงสร้าง
App
ของคุณผ่านUIApplicationDelegateAdaptor
หรือNSApplicationDelegateAdaptor
คุณต้องปิดใช้ SWizzing ที่มอบสิทธิ์ของแอปด้วย ดูข้อมูลเพิ่มเติมได้ที่วิธีการ SwiftUISwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- เมื่อผู้ใช้ใหม่ลงชื่อสมัครใช้โดยใช้แบบฟอร์มการลงชื่อสมัครใช้ของแอป ให้ทำตามขั้นตอนการตรวจสอบบัญชีใหม่ทั้งหมดที่แอปกำหนด เช่น ยืนยันว่ามีการพิมพ์รหัสผ่านของบัญชีใหม่อย่างถูกต้องและเป็นไปตามข้อกำหนดด้านความซับซ้อน
- สร้างบัญชีใหม่โดยส่งอีเมลและรหัสผ่านของผู้ใช้ใหม่ให้กับ
createUser
Swift
Auth.auth().createUser(withEmail: email, password: password) { authResult, error in // ... }
Objective-C
[[FIRAuth auth] createUserWithEmail:email password:password completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }];
ลงชื่อเข้าใช้ผู้ใช้ด้วยอีเมลและรหัสผ่าน
ขั้นตอนการลงชื่อเข้าใช้ผู้ใช้ด้วยรหัสผ่านจะคล้ายกับขั้นตอนการสร้างบัญชีใหม่ ในกิจกรรมการลงชื่อเข้าใช้ของแอป ให้ทำดังนี้
- นําเข้าโมดูล
FirebaseCore
ในUIApplicationDelegate
รวมถึงโมดูล Firebase อื่นๆ ที่ผู้รับมอบสิทธิ์ของแอปใช้ ตัวอย่างเช่น หากต้องการใช้ Cloud Firestore และ Authentication ให้ทำดังนี้SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- กำหนดค่าอินสแตนซ์ที่แชร์ในเมธอด
application(_:didFinishLaunchingWithOptions:)
ของตัวแทนแอป ดังนี้FirebaseApp
SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- หากใช้ SwiftUI คุณต้องสร้างการมอบสิทธิ์แอปพลิเคชันและแนบการมอบสิทธิ์
ไปยังโครงสร้าง
App
ของคุณผ่านUIApplicationDelegateAdaptor
หรือNSApplicationDelegateAdaptor
คุณต้องปิดใช้ SWizzing ที่มอบสิทธิ์ของแอปด้วย สำหรับ สำหรับข้อมูลเพิ่มเติม โปรดดูวิธีการของ SwiftUISwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- เมื่อผู้ใช้ลงชื่อเข้าใช้แอป ให้ส่งอีเมลและรหัสผ่านของผู้ใช้ไปยัง
signIn
Swift
Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in guard let strongSelf = self else { return } // ... }
Objective-C
[[FIRAuth auth] signInWithEmail:self->_emailField.text password:self->_passwordField.text completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }];
แนะนํา: ตั้งค่านโยบายรหัสผ่าน
คุณเพิ่มความปลอดภัยของบัญชีได้โดยบังคับใช้ข้อกำหนดด้านความซับซ้อนของรหัสผ่าน
หากต้องการกำหนดค่านโยบายรหัสผ่านสำหรับโปรเจ็กต์ ให้เปิดแท็บนโยบายรหัสผ่านในหน้าการตั้งค่าการตรวจสอบสิทธิ์ของคอนโซล Firebase โดยทำดังนี้
นโยบายรหัสผ่าน Firebase Authentication รองรับข้อกำหนดของรหัสผ่านต่อไปนี้
ต้องมีอักขระตัวพิมพ์เล็ก
ต้องมีอักขระตัวพิมพ์ใหญ่
ต้องมีอักขระที่เป็นตัวเลข
ต้องมีอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกัน
อักขระต่อไปนี้เป็นไปตามข้อกำหนดของอักขระที่ไม่ใช่ตัวอักษรและตัวเลข
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~
ความยาวขั้นต่ำของรหัสผ่าน (ช่วงตั้งแต่ 6 ถึง 30 อักขระ ค่าเริ่มต้นคือ 6)
ความยาวสูงสุดของรหัสผ่าน (ไม่เกิน 4,096 อักขระ)
คุณสามารถเปิดการบังคับใช้นโยบายรหัสผ่านได้ใน 2 โหมดดังนี้
ต้อง: การพยายามลงชื่อเข้าใช้จะล้มเหลวจนกว่าผู้ใช้จะอัปเดตเป็นรหัสผ่านที่เป็นไปตามนโยบายของคุณ
แจ้ง: ผู้ใช้จะลงชื่อเข้าใช้ด้วยรหัสผ่านที่ไม่เป็นไปตามนโยบายได้ วันและเวลา เมื่อใช้โหมดนี้ คุณควรตรวจสอบว่ารหัสผ่านของผู้ใช้เป็นไปตาม ในฝั่งไคลเอ็นต์และแจ้งให้ผู้ใช้อัปเดต หากไม่เป็นไปตามข้อกำหนด
ผู้ใช้ใหม่จะต้องเลือกรหัสผ่านที่สอดคล้องกับ
หากคุณมีผู้ใช้ที่ใช้งานอยู่ เราขอแนะนำให้ไม่เปิดใช้โหมดบังคับ เว้นแต่คุณจะตั้งใจจะบล็อกการเข้าถึงของผู้ใช้ที่มีรหัสผ่านไม่เป็นไปตามนโยบาย ให้ใช้โหมดแจ้งเตือนแทน ซึ่งอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ด้วยบัญชีปัจจุบัน รหัสผ่าน และแจ้งข้อกำหนดที่รหัสผ่านขาดไป
แนะนำ: เปิดใช้การป้องกันการนับอีเมล
เมธอด Firebase Authentication บางรายการที่ใช้อีเมลเป็นพารามิเตอร์จะแสดงข้อผิดพลาดที่เฉพาะเจาะจงหากอีเมลไม่ได้ลงทะเบียนเมื่อต้องลงทะเบียน (เช่น เมื่อลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่าน) หรือลงทะเบียนเมื่อต้องไม่ใช้ (เช่น เมื่อเปลี่ยนอีเมลของผู้ใช้) แม้วิธีนี้จะมีประโยชน์ในการแนะนําวิธีแก้ไขที่เฉพาะเจาะจงให้กับผู้ใช้ แต่ก็อาจ ถูกผู้ประสงค์ร้ายละเมิดเพื่อค้นหาที่อยู่อีเมลที่ลงทะเบียนไว้โดย ผู้ใช้
หากต้องการลดความเสี่ยงนี้ เราขอแนะนำให้คุณเปิดใช้การป้องกันการระบุอีเมลสำหรับโปรเจ็กต์โดยใช้เครื่องมือ gcloud
ของ Google Cloud โปรดทราบว่าการเปิดใช้ฟีเจอร์นี้จะเปลี่ยนลักษณะการรายงานข้อผิดพลาดของ Firebase Authentication โปรดตรวจสอบว่าแอปของคุณไม่ได้ใช้ข้อผิดพลาดที่เฉพาะเจาะจงมากขึ้น
ขั้นตอนถัดไป
หลังจากผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่และลิงก์กับข้อมูลเข้าสู่ระบบ ซึ่งก็คือชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลผู้ให้บริการตรวจสอบสิทธิ์ที่ผู้ใช้ลงชื่อเข้าใช้ด้วย ใหม่นี้ จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และสามารถใช้เพื่อระบุ ผู้ใช้สำหรับทุกแอปในโปรเจ็กต์ของคุณ ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้ด้วยวิธีใดก็ตาม
-
ในแอป คุณสามารถดูข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ได้จากออบเจ็กต์
User
โปรดดูหัวข้อจัดการผู้ใช้ ในFirebase Realtime DatabaseและCloud Storage กฎความปลอดภัย คุณสามารถทำสิ่งต่อไปนี้ รับรหัสผู้ใช้ที่ไม่ซ้ำของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร
auth
และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้
คุณอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้การตรวจสอบสิทธิ์หลายรายการได้ โดยลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการการตรวจสอบสิทธิ์กับ บัญชีผู้ใช้ที่มีอยู่เดิม
หากต้องการนำผู้ใช้ออกจากระบบ โปรดโทร
signOut:
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
คุณอาจต้องเพิ่มโค้ดการจัดการข้อผิดพลาดสำหรับการตรวจสอบสิทธิ์ทั้งหมดด้วย ดูจัดการข้อผิดพลาด