คุณระบุสถานะการตรวจสอบสิทธิ์จะยังคงอยู่เมื่อใช้ Firebase ได้ JS SDK ซึ่งรวมถึงความสามารถในการระบุว่าผู้ใช้ที่ลงชื่อเข้าใช้ควร คงอยู่อย่างไม่มีกำหนดจนกว่าจะออกจากระบบอย่างชัดแจ้ง ล้างเมื่อหน้าต่าง ปิดหรือล้างไปแล้วเมื่อโหลดหน้าเว็บซ้ำ
สำหรับเว็บแอปพลิเคชัน การทำงานเริ่มต้นคือคงเซสชันของผู้ใช้ไว้แม้ หลังจากที่ผู้ใช้ปิดเบราว์เซอร์ วิธีนี้สะดวกเนื่องจากผู้ใช้ไม่ได้ เพื่อลงชื่อเข้าใช้อย่างต่อเนื่องทุกครั้งที่มีการเข้าชมหน้าเว็บ อุปกรณ์ ซึ่งอาจทำให้ผู้ใช้ต้องป้อนรหัสผ่านอีกครั้ง ส่ง การยืนยันทาง SMS ฯลฯ ซึ่งอาจเพิ่มความยุ่งยากให้กับการใช้งานของผู้ใช้ได้
อย่างไรก็ตาม ในบางกรณีพฤติกรรมนี้อาจไม่เหมาะสม
- แอปพลิเคชันที่มีข้อมูลที่ละเอียดอ่อนอาจต้องการล้างสถานะเมื่อหน้าต่าง หรือ Tab ปิดอยู่ ซึ่งมีความสำคัญในกรณีที่ผู้ใช้ลืมออกจากระบบ
- แอปพลิเคชันที่ใช้ในอุปกรณ์ที่มีผู้ใช้หลายคนแชร์ ทั่วไป ตัวอย่างเช่น นี่คือแอปที่ทำงานอยู่ในห้องสมุดคอมพิวเตอร์
- แอปพลิเคชันในอุปกรณ์ที่แชร์ ซึ่งอาจมีผู้ใช้หลายคนเข้าถึง นักพัฒนาซอฟต์แวร์ไม่สามารถบอกได้ว่ามีการเข้าถึงแอปพลิเคชันนั้นอย่างไรและอาจต้องการ เพื่อให้ผู้ใช้สามารถเลือกได้ว่าจะคงเซสชันของตนไว้หรือไม่ หรือไม่ ซึ่งสามารถทำได้ด้วยการเพิ่มปุ่ม "จดจำฉัน" ในระหว่างการลงชื่อเข้าใช้
- ในบางสถานการณ์ นักพัฒนาซอฟต์แวร์อาจต้องการไม่รวมผู้ใช้ที่ไม่ระบุชื่อ จนกว่าผู้ใช้รายนั้นจะได้รับการอัปเกรดเป็นบัญชีที่ไม่ระบุตัวบุคคล (สมาพันธ์ รหัสผ่าน โทรศัพท์ เป็นต้น)
- นักพัฒนาแอปอาจต้องการอนุญาตให้ผู้ใช้ที่แตกต่างกันลงชื่อเข้าใช้แอปพลิเคชัน บนแท็บต่างๆ การทำงานเริ่มต้นคือการคงสถานะไว้ในแท็บต่างๆ สำหรับต้นกำเนิดเดียวกัน
ตามที่ระบุไว้ข้างต้น มีหลายกรณีที่ค่าเริ่มต้นแบบถาวร อาจต้องลบล้างความต่อเนื่อง
ประเภทความต่อเนื่องของสถานะการตรวจสอบสิทธิ์ที่รองรับ
คุณสามารถเลือก 1 จาก 3 ประเภทความต่อเนื่องของสถานะการตรวจสอบสิทธิ์ใน อินสแตนซ์ Firebase Auth โดยพิจารณาจากข้อกำหนดแอปพลิเคชันหรือผู้ใช้
ค่าแจกแจง | ค่า | คำอธิบาย |
---|---|---|
firebase.auth.Auth.Persistence.LOCAL |
"local" | ระบุว่าสถานะจะยังคงเดิมแม้ว่าหน้าต่างเบราว์เซอร์จะเปิดอยู่ ปิดหรือกิจกรรมถูกทำลายใน React Native การออกจากระบบอย่างชัดแจ้ง เพื่อล้างสถานะดังกล่าว โปรดทราบว่าเซสชันเว็บการตรวจสอบสิทธิ์ Firebase ต้นทางของโฮสต์เดียวและจะยังคงอยู่สำหรับโดเมนเดียวเท่านั้น |
firebase.auth.Auth.Persistence.SESSION |
'เซสชัน' | ระบุว่าสถานะจะยังอยู่ในเซสชันหรือแท็บปัจจุบันเท่านั้น และจะถูกล้างเมื่อแท็บหรือหน้าต่างที่ผู้ใช้ตรวจสอบสิทธิ์ ปิดแล้ว ใช้กับเว็บแอปเท่านั้น |
firebase.auth.Auth.Persistence.NONE |
"none" | ระบุว่าระบบจะเก็บสถานะนี้ไว้ในหน่วยความจำเท่านั้นและจะถูกล้าง เมื่อมีการรีเฟรชหน้าต่างหรือกิจกรรม |
การแก้ไขความต่อเนื่องของสถานะการตรวจสอบสิทธิ์
คุณสามารถระบุหรือแก้ไขประเภทความต่อเนื่องที่มีอยู่ได้โดยเรียกใช้
เมธอด firebase.auth().setPersistence
:
Web
import { getAuth, setPersistence, signInWithEmailAndPassword, browserSessionPersistence } from "firebase/auth"; const auth = getAuth(); setPersistence(auth, browserSessionPersistence) .then(() => { // Existing and future Auth states are now persisted in the current // session only. Closing the window would clear any existing state even // if a user forgets to sign out. // ... // New sign-in will be persisted with session persistence. return signInWithEmailAndPassword(auth, email, password); }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; });
Web
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION) .then(() => { // Existing and future Auth states are now persisted in the current // session only. Closing the window would clear any existing state even // if a user forgets to sign out. // ... // New sign-in will be persisted with session persistence. return firebase.auth().signInWithEmailAndPassword(email, password); }) .catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; });
การดำเนินการนี้จะเปลี่ยนประเภทของการคงอยู่ในอินสแตนซ์การตรวจสอบสิทธิ์ที่ระบุ สำหรับเซสชันการตรวจสอบสิทธิ์ที่บันทึกไว้ในปัจจุบัน และใช้ความต่อเนื่องประเภทนี้สำหรับ คำขอลงชื่อเข้าใช้ในอนาคต ซึ่งรวมถึงการลงชื่อเข้าใช้ด้วยคำขอเปลี่ยนเส้นทาง การดำเนินการนี้จะ ส่งคืนสัญญาที่จะได้รับการแก้ไขเมื่อรัฐคัดลอกจาก ประเภทพื้นที่เก็บข้อมูลให้กับอีกประเภทหนึ่ง การเรียกใช้วิธีการลงชื่อเข้าใช้หลังจากเปลี่ยนความต่อเนื่องจะรอ การเปลี่ยนแปลงถาวรให้เสร็จเรียบร้อยก่อนนำไปใช้กับสถานะการตรวจสอบสิทธิ์ใหม่
ค่าเริ่มต้นสำหรับเว็บเบราว์เซอร์และแอป React เนทีฟคือ local
(หากกำหนดค่า
เบราว์เซอร์รองรับกลไกการเก็บข้อมูลนี้ เช่น เปิดใช้งานคุกกี้/ข้อมูลของบุคคลที่สาม)
ในขณะที่คือ none
สำหรับแอปแบ็กเอนด์ Node.js
ภาพรวมของพฤติกรรมการใช้งานต่อเนื่อง
เกณฑ์ต่อไปนี้จะถูกนำมาใช้เมื่อพิจารณาสถานะปัจจุบันของ การคงอยู่
- ในขั้นต้น SDK จะตรวจสอบว่ามีผู้ใช้ที่ตรวจสอบสิทธิ์แล้วหรือไม่ ยกเว้น
จะมีการเรียก
setPersistence
โดยประเภทการคงอยู่ปัจจุบันของผู้ใช้จะเป็น เมื่อมีการลงชื่อเข้าใช้ในอนาคต ดังนั้นถ้าผู้ใช้อยู่ในsession
ในหน้าเว็บก่อนหน้าและมีการเข้าชมหน้าใหม่ หากลงชื่อเข้าใช้อีกครั้งด้วยผู้ใช้รายอื่น สถานะของผู้ใช้รายนั้นจะเป็น บันทึกด้วยsession
ต่อเนื่องแล้ว - หากไม่มีผู้ใช้ที่ลงชื่อเข้าใช้และไม่ได้ระบุถาวรไว้ ระบบจะใช้การตั้งค่าเริ่มต้น
(
local
ในแอปเบราว์เซอร์) - หากไม่มีผู้ใช้ลงชื่อเข้าใช้ และมีการตั้งค่าความต่อเนื่องประเภทใหม่ การพยายามลงชื่อเข้าใช้จะใช้การคงอยู่ประเภทนั้น
- หากผู้ใช้ลงชื่อเข้าใช้และมีการปรับเปลี่ยนประเภทการคงอยู่ ตัวเลือกที่มีอยู่ ผู้ใช้ที่ลงชื่อเข้าใช้จะเปลี่ยนการคงอยู่ถาวรเป็นผู้ใช้ใหม่ การลงชื่อเข้าใช้ทั้งหมดในอนาคต จะใช้การถาวรใหม่
เมื่อเรียก signInWithRedirect ประเภทความต่อเนื่องปัจจุบันจะยังคงอยู่ และนำไปใช้ในตอนท้ายของขั้นตอน OAuth กับผู้ใช้ที่ลงชื่อเข้าใช้ใหม่ การคงอยู่คือ
none
หากระบุการคงอยู่อย่างชัดแจ้งในหน้านั้น การตั้งค่าดังกล่าวจะลบล้าง รักษาสถานะการตรวจสอบสิทธิ์ไว้จากหน้าก่อนหน้าที่เริ่มต้น ของขั้นตอนการเปลี่ยนเส้นทางWeb
import { getAuth, setPersistence, signInWithRedirect, inMemoryPersistence, GoogleAuthProvider } from "firebase/auth"; const auth = getAuth(); setPersistence(auth, inMemoryPersistence) .then(() => { const provider = new GoogleAuthProvider(); // In memory persistence will be applied to the signed in Google user // even though the persistence was set to 'none' and a page redirect // occurred. return signInWithRedirect(auth, provider); }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; });
Web
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE) .then(() => { var provider = new firebase.auth.GoogleAuthProvider(); // In memory persistence will be applied to the signed in Google user // even though the persistence was set to 'none' and a page redirect // occurred. return firebase.auth().signInWithRedirect(provider); }) .catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; });
ลักษณะการทำงานที่คาดไว้ในแท็บเบราว์เซอร์
ระบบจะใช้ลักษณะการทำงานที่คาดหวังต่อไปนี้เมื่อประเภทความต่อเนื่องที่แตกต่างกันคือ
ที่ใช้ในแท็บต่างๆ ข้อกำหนดก็คือ ในทุกกรณี ต้องไม่มี
เป็นสถานะที่บันทึกไว้หลายประเภทพร้อมกัน (เช่น สถานะการตรวจสอบสิทธิ์ที่บันทึกไว้ใน
พื้นที่เก็บข้อมูล session
และ local
ประเภท):
- ผู้ใช้สามารถลงชื่อเข้าใช้โดยใช้การถาวรของ
session
หรือnone
กับผู้ใช้คนอื่นๆ ได้ ในหลายแท็บ แต่ละแท็บจะไม่เห็นสถานะของอีกแท็บ - ระบบจะตรวจจับความพยายามลงชื่อเข้าใช้โดยใช้การคงอยู่ของ
local
และ ซิงค์ข้อมูลในทุกแท็บแล้ว หากก่อนหน้านี้ผู้ใช้เคยลงชื่อเข้าใช้ แท็บที่ใช้การคงอยู่session
หรือnone
สถานะนั้นจะถูกล้าง - กรณีที่ผู้ใช้ลงชื่อเข้าใช้ก่อนหน้านี้โดยใช้การถาวร
local
กับหลายรายการ แท็บที่เปิดอยู่ จากนั้นเปลี่ยนเป็นnone
หรือsession
การคงอยู่ในแท็บเดียว สถานะของแท็บนั้นจะมีการแก้ไขโดยที่ผู้ใช้อยู่ในsession
หรือnone
และแท็บอื่นๆ ทั้งหมด ผู้ใช้จะออกจากระบบ