คุณสามารถใช้ Firebase Authentication เพื่ออนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้วิธีการลงชื่อเข้าใช้ตั้งแต่ 1 วิธีขึ้นไป ซึ่งรวมถึงการลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่าน รวมถึงผู้ให้บริการข้อมูลประจำตัวแบบรวมศูนย์ เช่น Google Sign-in และ Facebook Login บทแนะนำนี้จะช่วยให้คุณเริ่มต้นใช้งานFirebase Authenticationโดยแสดงวิธีเพิ่มการลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่านลงในแอป
เชื่อมต่อแอปกับ Firebase
- ติดตั้ง Firebase SDK
- ใน Firebase คอนโซล เพิ่มแอปของคุณลงในโปรเจ็กต์ Firebase
เพิ่ม Firebase Authentication ลงในแอป
ใช้ Swift Package Manager เพื่อติดตั้งและจัดการทรัพยากร Dependency ของ Firebase
- เปิดโปรเจ็กต์แอปใน Xcode แล้วไปที่ File > Add Packages
- เมื่อได้รับข้อความแจ้ง ให้เพิ่มที่เก็บ Firebase Apple Platforms SDK ดังนี้
- เลือกไลบรารี Firebase Authentication
- เพิ่มแฟล็ก
-ObjCลงในส่วน Other Linker Flags ของการตั้งค่าบิลด์ของเป้าหมาย - เมื่อเสร็จแล้ว Xcode จะเริ่มจับคู่ข้อมูลและดาวน์โหลด ทรัพยากร Dependency ในเบื้องหลังโดยอัตโนมัติ
https://github.com/firebase/firebase-ios-sdk.git
(ไม่บังคับ) สร้างต้นแบบและทดสอบด้วย Firebase Local Emulator Suite
ก่อนจะพูดถึงวิธีที่แอปตรวจสอบสิทธิ์ผู้ใช้ เรามาแนะนำชุด เครื่องมือที่คุณใช้สร้างต้นแบบและทดสอบAuthenticationฟังก์ชันการทำงานได้ นั่นคือ Firebase Local Emulator Suite หากคุณกำลังตัดสินใจเลือกเทคนิคการตรวจสอบสิทธิ์ และผู้ให้บริการ ลองใช้โมเดลข้อมูลต่างๆ กับข้อมูลสาธารณะและข้อมูลส่วนตัว โดยใช้ Authentication และ Firebase Security Rules หรือสร้างต้นแบบการออกแบบ UI การลงชื่อเข้าใช้ การทำงานในเครื่องโดยไม่ต้องติดตั้งใช้งานบริการจริง อาจเป็นความคิดที่ดี
โปรแกรมจำลองAuthenticationเป็นส่วนหนึ่งของLocal Emulator Suiteซึ่ง ช่วยให้แอปโต้ตอบกับเนื้อหาและการกำหนดค่าฐานข้อมูลที่จำลองได้ รวมถึง ทรัพยากรโปรเจ็กต์ที่จำลอง (ฟังก์ชัน ฐานข้อมูลอื่นๆ และกฎความปลอดภัย) ได้ด้วย
การใช้โปรแกรมจำลอง Authentication มีขั้นตอนง่ายๆ ดังนี้
- เพิ่มบรรทัดโค้ดลงในการกำหนดค่าการทดสอบของแอปเพื่อเชื่อมต่อกับโปรแกรมจำลอง
- เรียกใช้
firebase emulators:startจากรูทของไดเรกทอรีโปรเจ็กต์ที่อยู่ในเครื่อง - ใช้ UI ของ Local Emulator Suite เพื่อสร้างต้นแบบแบบอินเทอร์แอกทีฟ หรือใช้ Authentication emulator REST API สำหรับการทดสอบแบบไม่โต้ตอบ
ดูคำแนะนำโดยละเอียดได้ที่ เชื่อมต่อแอปกับโปรแกรมจำลองAuthentication ดูข้อมูลเพิ่มเติมได้ที่บทนำเกี่ยวกับ Local Emulator Suite
ตอนนี้เรามาดูวิธีตรวจสอบสิทธิ์ผู้ใช้กันต่อ
เริ่มต้น Firebase SDK
ในผู้รับมอบสิทธิ์ของแอป ให้นำเข้า Firebase SDK ก่อนดังนี้
Swift
import FirebaseCore
Objective-C
@import FirebaseCore;
จากนั้นในเมธอด application:didFinishLaunchingWithOptions: ให้เริ่มต้นออบเจ็กต์ FirebaseApp ดังนี้
Swift
// Use Firebase library to configure APIs
FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs
[FIRApp configure];
ฟังสถานะการตรวจสอบสิทธิ์
สำหรับมุมมองแต่ละรายการของแอปที่ต้องใช้ข้อมูลเกี่ยวกับผู้ใช้ที่ลงชื่อเข้าใช้ ให้แนบ Listener กับออบเจ็กต์ FIRAuth ระบบจะเรียก Listener นี้เมื่อใดก็ตามที่สถานะการลงชื่อเข้าใช้ของผู้ใช้เปลี่ยนแปลง
แนบ Listener ในเมธอด viewWillAppear ของ View Controller ดังนี้
Swift
handle = Auth.auth().addStateDidChangeListener { auth, user in
// ...
}
Objective-C
self.handle = [[FIRAuth auth]
addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
// ...
}];
และถอด Listener ในเมธอด viewWillDisappear ของ View Controller ดังนี้
Swift
Auth.auth().removeStateDidChangeListener(handle!)
Objective-C
[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];
ลงชื่อสมัครใช้ผู้ใช้ใหม่
สร้างแบบฟอร์มที่อนุญาตให้ผู้ใช้ใหม่ลงทะเบียนกับแอปโดยใช้อีเมลและรหัสผ่าน เมื่อผู้ใช้กรอกแบบฟอร์มเสร็จแล้ว ให้ตรวจสอบอีเมลและรหัสผ่านที่ผู้ใช้ระบุ จากนั้นส่งไปยังเมธอด 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) {
// ...
}];
ลงชื่อเข้าใช้ผู้ใช้ที่มีอยู่
สร้างแบบฟอร์มที่อนุญาตให้ผู้ใช้ที่มีอยู่ลงชื่อเข้าใช้โดยใช้อีเมลและรหัสผ่าน เมื่อผู้ใช้กรอกแบบฟอร์มเสร็จแล้ว ให้เรียกเมธอด 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) {
// ...
}];
รับข้อมูลผู้ใช้
หลังจากที่ผู้ใช้ลงชื่อเข้าใช้สำเร็จแล้ว คุณจะได้รับข้อมูลเกี่ยวกับผู้ใช้ เช่น ใน Listener สถานะการตรวจสอบสิทธิ์
Swift
if let user = user {
// The user's ID, unique to the Firebase project.
// Do NOT use this value to authenticate with your backend server,
// if you have one. Use getTokenWithCompletion:completion: instead.
let uid = user.uid
let email = user.email
let photoURL = user.photoURL
var multiFactorString = "MultiFactor: "
for info in user.multiFactor.enrolledFactors {
multiFactorString += info.displayName ?? "[DispayName]"
multiFactorString += " "
}
// ...
}
Objective-C
if (user) {
// The user's ID, unique to the Firebase project.
// Do NOT use this value to authenticate with your backend server,
// if you have one. Use getTokenWithCompletion:completion: instead.
NSString *email = user.email;
NSString *uid = user.uid;
NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
[multiFactorString appendString:info.displayName];
[multiFactorString appendString:@" "];
}
NSURL *photoURL = user.photoURL;
// ...
}
ขั้นตอนถัดไป
ดูวิธีเพิ่มการรองรับผู้ให้บริการข้อมูลประจำตัวรายอื่นๆ และบัญชีผู้ใช้ชั่วคราวที่ไม่ระบุชื่อ