ฉันเคยผ่านสิ่งนี้มาแล้วด้วย sled.com มีปัญหาหลายประการเกี่ยวกับการสร้างบัญชีและการสนับสนุนบัญชีบุคคลที่สามหลายบัญชีเพื่อเข้าสู่ระบบ บางส่วนของพวกเขาคือ:
- คุณต้องการที่จะสนับสนุนทั้งรหัสผ่านท้องถิ่นและเข้าสู่ระบบบุคคลที่สาม?
สำหรับ sled.com ฉันได้ตัดสินใจวางรหัสผ่านในท้องที่เนื่องจากมีค่าเล็กน้อยที่เพิ่มเข้ามาและค่าใช้จ่ายเพิ่มเติมในการรักษาความปลอดภัยของแบบฟอร์มการป้อนรหัสผ่าน มีการโจมตีที่รู้จักกันหลายครั้งสำหรับการทำลายรหัสผ่านและหากคุณจะแนะนำรหัสผ่านคุณต้องแน่ใจว่าพวกเขาจะไม่แตกหักง่าย คุณต้องเก็บไว้ในแฮชแบบทางเดียวหรือสิ่งที่คล้ายกันเพื่อป้องกันไม่ให้รั่วไหล
- คุณต้องการความยืดหยุ่นในการสนับสนุนบัญชีบุคคลที่สามหลายบัญชีหรือไม่
ดูเหมือนว่าคุณได้เลือกผู้ให้บริการเข้าสู่ระบบสามคน: Facebook, Twitter และ LinkedIn เยี่ยมมากเพราะหมายความว่าคุณกำลังใช้ OAuth และทำงานกับผู้ให้บริการที่เชื่อถือได้ ฉันไม่ใช่แฟนของ OpenID คำถามที่เหลือคือถ้าคุณต้องการสนับสนุนบัญชีบุคคลที่สามหลายบัญชีจากผู้ให้บริการรายเดียวกัน (เช่นบัญชีท้องถิ่นหนึ่งบัญชีที่เชื่อมโยงกับบัญชี Twitter สองบัญชี) ฉันถือว่าไม่มี แต่ถ้าคุณทำคุณจะต้องรองรับในรูปแบบข้อมูลของคุณ
สำหรับ Sled เราสนับสนุนการลงชื่อเข้าใช้ด้วย Facebook, Twitter และ Yahoo! และภายในแต่ละบัญชีผู้ใช้จะมีรหัสสำหรับแต่ละคีย์: {"_id": "djdjd99dj", "yahoo": "dj39djdj", twitter: "3723828732", "facebook": "12837287"} เราตั้งค่าข้อ จำกัด มากมายเพื่อให้แน่ใจว่าบัญชีบุคคลที่สามแต่ละบัญชีสามารถเชื่อมโยงกับบัญชีท้องถิ่นเดียวเท่านั้น
หากคุณจะอนุญาตให้มีหลายบัญชีจากผู้ให้บริการบุคคลที่สามเดียวกันคุณจะต้องใช้รายการหรือโครงสร้างอื่น ๆ เพื่อสนับสนุนสิ่งนั้นและด้วยข้อ จำกัด อื่น ๆ ทั้งหมดเพื่อให้แน่ใจว่ามีเอกลักษณ์
- จะเชื่อมโยงหลายบัญชีได้อย่างไร
ครั้งแรกที่ผู้ใช้สมัครใช้บริการของคุณพวกเขาจะไปที่ผู้ให้บริการบุคคลที่สามก่อนแล้วจึงกลับมาพร้อมกับรหัสบุคคลที่สามที่ผ่านการตรวจสอบแล้ว จากนั้นคุณสร้างบัญชีท้องถิ่นสำหรับพวกเขาและรวบรวมข้อมูลอื่น ๆ ที่คุณต้องการ เรารวบรวมที่อยู่อีเมลของพวกเขาและขอให้พวกเขาเลือกชื่อผู้ใช้ในท้องถิ่น (เราพยายามเติมข้อมูลฟอร์มล่วงหน้าด้วยชื่อผู้ใช้ที่มีอยู่จากผู้ให้บริการรายอื่น) การมีตัวระบุท้องถิ่นบางรูปแบบ (อีเมลชื่อผู้ใช้) เป็นสิ่งสำคัญมากสำหรับการกู้คืนบัญชีในภายหลัง
เซิร์ฟเวอร์รู้ว่านี่เป็นการเข้าสู่ระบบครั้งแรกหากเบราว์เซอร์ไม่มีเซสชันคุกกี้ (ใช้ได้หรือหมดอายุ) สำหรับบัญชีที่มีอยู่และไม่พบบัญชีบุคคลที่สามที่ใช้ เราพยายามแจ้งให้ผู้ใช้ทราบว่าพวกเขาไม่ได้เป็นเพียงการเข้าสู่ระบบ แต่กำลังสร้างบัญชีใหม่เพื่อที่ว่าหากพวกเขามีบัญชีอยู่แล้วพวกเขาหวังว่าจะหยุดชั่วคราวและเข้าสู่ระบบด้วยบัญชีที่มีอยู่แทน
เราใช้ขั้นตอนเดียวกันเพื่อเชื่อมโยงบัญชีเพิ่มเติม แต่เมื่อผู้ใช้กลับมาจากบุคคลที่สามการมีคุกกี้เซสชันที่ถูกต้องจะใช้เพื่อแยกความแตกต่างระหว่างความพยายามเชื่อมโยงบัญชีใหม่กับการดำเนินการเข้าสู่ระบบ เราอนุญาตให้บัญชีบุคคลที่สามหนึ่งบัญชีสำหรับแต่ละประเภทเท่านั้นและหากมีการเชื่อมโยงหนึ่งบัญชีให้ปิดกั้นการกระทำ ไม่น่าจะมีปัญหาเพราะอินเทอร์เฟซการเชื่อมโยงบัญชีใหม่ถูกปิดใช้งานถ้าคุณมีหนึ่ง (ต่อผู้ให้บริการ) แต่ในกรณี
หากผู้ใช้พยายามเชื่อมโยงบัญชีบุคคลที่สามใหม่ซึ่งเชื่อมโยงกับบัญชีท้องถิ่นแล้วคุณเพียง แต่แจ้งให้พวกเขายืนยันว่าพวกเขาต้องการรวมสองบัญชี (สมมติว่าคุณสามารถจัดการรวมกับชุดข้อมูลของคุณได้) กว่าเสร็จแล้ว) คุณยังสามารถมอบปุ่มพิเศษให้พวกเขาเพื่อขอให้ทำการผสาน แต่ในทางปฏิบัติสิ่งที่พวกเขาทำคือการเชื่อมโยงบัญชีอื่น
นี่เป็นเครื่องรัฐที่เรียบง่าย ผู้ใช้กลับมาจากบุคคลที่สามด้วยรหัสบัญชีบุคคลที่สาม ฐานข้อมูลของคุณสามารถอยู่ในสถานะใดสถานะหนึ่งในสามสถานะ:
- บัญชีเชื่อมโยงกับบัญชีท้องถิ่นและไม่มีคุกกี้เซสชัน -> เข้าสู่ระบบ
- บัญชีเชื่อมโยงกับบัญชีท้องถิ่นและมีเซสชันคุกกี้ -> ผสาน
- บัญชีไม่ได้เชื่อมโยงกับบัญชีท้องถิ่นและไม่มีคุกกี้เซสชัน -> ลงชื่อสมัครใช้
บัญชีไม่ได้เชื่อมโยงกับบัญชีท้องถิ่นและคุกกี้เซสชันมีอยู่ -> การเชื่อมโยงบัญชีเพิ่มเติม
- วิธีการกู้คืนบัญชีกับผู้ให้บริการบุคคลที่สาม
นี่คือดินแดนทดลอง ฉันไม่ได้เห็น UX ที่สมบูรณ์แบบสำหรับบริการนี้เพราะบริการส่วนใหญ่ให้รหัสผ่านในพื้นที่ถัดจากบัญชีบุคคลที่สามดังนั้นจึงมุ่งเน้นไปที่กรณีการใช้ "ลืมรหัสผ่านของฉัน" ไม่ใช่ทุกอย่างที่ผิดพลาด
ด้วย Sled เราได้เลือกใช้ "ต้องการความช่วยเหลือในการลงชื่อเข้าใช้หรือไม่" และเมื่อคุณคลิกถามผู้ใช้สำหรับอีเมลหรือชื่อผู้ใช้ของพวกเขา เราค้นหาและหากเราพบบัญชีที่ตรงกันให้ส่งลิงก์ให้กับผู้ใช้ซึ่งสามารถล็อกอินเข้าสู่บริการโดยอัตโนมัติ (ดีครั้งเดียว) เมื่อเข้ามาเราจะพาพวกเขาไปยังหน้าการเชื่อมโยงบัญชีบอกพวกเขาว่าพวกเขาควรพิจารณาและอาจเชื่อมโยงบัญชีเพิ่มเติมและแสดงให้พวกเขาเห็นบัญชีบุคคลที่สามที่พวกเขามีการเชื่อมโยงแล้ว