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