Tôi đã trải qua điều này với sled.com. Có nhiều vấn đề ở đây liên quan đến việc tạo tài khoản và hỗ trợ nhiều tài khoản bên thứ ba để đăng nhập. Một số trong số họ là:
- Bạn có cần hỗ trợ cả mật khẩu cục bộ và thông tin đăng nhập của bên thứ ba không?
Đối với sled.com, tôi đã quyết định bỏ mật khẩu cục bộ do giá trị nhỏ mà nó thêm vào và chi phí bổ sung trong việc bảo mật biểu mẫu nhập mật khẩu. Có nhiều cuộc tấn công được biết đến để phá mật khẩu và nếu bạn định giới thiệu mật khẩu, bạn phải chắc chắn rằng chúng không dễ bị phá vỡ. Bạn cũng cần lưu trữ chúng theo cách băm một chiều hoặc một cái gì đó tương tự để ngăn chặn chúng bị rò rỉ.
- Bạn muốn cho phép linh hoạt bao nhiêu trong việc hỗ trợ nhiều tài khoản bên thứ ba?
Có vẻ như bạn đã chọn ba nhà cung cấp đăng nhập: Facebook, Twitter và LinkedIn. Điều đó thật tuyệt bởi vì điều đó có nghĩa là bạn đang sử dụng OAuth và làm việc với một nhóm các nhà cung cấp đáng tin cậy được xác định rõ. Tôi không phải là fan hâm mộ của OpenID. Câu hỏi còn lại là nếu bạn cần hỗ trợ nhiều tài khoản bên thứ ba từ cùng một nhà cung cấp (ví dụ: một tài khoản cục bộ có hai tài khoản Twitter được liên kết). Tôi giả sử là không, nhưng nếu bạn làm thế, bạn sẽ cần điều chỉnh nó trong mô hình dữ liệu của mình.
Đối với Sled, chúng tôi hỗ trợ đăng nhập bằng Facebook, Twitter và Yahoo! và trong mỗi tài khoản người dùng lưu một khóa cho mỗi người: {"_id": "djdjd99dj", "yahoo": "dj39djdj", twitter: "3723828732", "facebook": "12837287"}. Chúng tôi thiết lập một loạt các ràng buộc để đảm bảo rằng mỗi tài khoản bên thứ ba chỉ có thể được liên kết với một tài khoản cục bộ.
Nếu bạn sẽ cho phép nhiều tài khoản từ cùng một nhà cung cấp bên thứ ba, bạn sẽ cần sử dụng danh sách hoặc các cấu trúc khác để hỗ trợ điều đó, và cùng với đó, tất cả các hạn chế khác để đảm bảo tính duy nhất.
- Làm thế nào để liên kết nhiều tài khoản?
Lần đầu tiên người dùng đăng ký dịch vụ của bạn, trước tiên họ đến nhà cung cấp bên thứ ba và quay lại với id của bên thứ ba đã được xác minh. Sau đó, bạn tạo một tài khoản cục bộ cho họ và thu thập bất kỳ thông tin nào bạn muốn. Chúng tôi thu thập địa chỉ email của họ và cũng yêu cầu họ chọn tên người dùng cục bộ (chúng tôi cố gắng điền trước biểu mẫu với tên người dùng hiện tại của họ từ nhà cung cấp khác). Có một số dạng định danh cục bộ (email, tên người dùng) là rất quan trọng để phục hồi tài khoản sau này.
Máy chủ biết đây là lần đăng nhập đầu tiên nếu trình duyệt không có cookie phiên (hợp lệ hoặc hết hạn) cho một tài khoản hiện có và không tìm thấy tài khoản bên thứ ba được sử dụng. Chúng tôi cố gắng thông báo cho người dùng rằng họ không chỉ đăng nhập mà đang tạo một tài khoản mới để nếu họ đã có tài khoản, họ sẽ hy vọng tạm dừng và đăng nhập bằng tài khoản hiện tại của họ.
Chúng tôi sử dụng cùng một luồng để liên kết các tài khoản bổ sung, nhưng khi người dùng quay lại từ bên thứ ba, sự hiện diện của cookie phiên hợp lệ được sử dụng để phân biệt giữa nỗ lực liên kết tài khoản mới với hành động đăng nhập. Chúng tôi chỉ cho phép một tài khoản bên thứ ba của mỗi loại và nếu đã có một tài khoản được liên kết, hãy chặn hành động. Nó không phải là một vấn đề vì giao diện để liên kết một tài khoản mới bị vô hiệu hóa nếu bạn đã có một (mỗi nhà cung cấp), nhưng chỉ trong trường hợp.
- Làm thế nào để hợp nhất tài khoản?
Nếu người dùng đã cố liên kết tài khoản bên thứ ba mới đã được liên kết với tài khoản cục bộ, bạn chỉ cần nhắc họ xác nhận họ muốn hợp nhất hai tài khoản (giả sử bạn có thể xử lý việc hợp nhất như vậy với tập dữ liệu của mình - thường dễ nói hơn hơn thực hiện). Bạn cũng có thể cung cấp cho họ một nút đặc biệt để yêu cầu hợp nhất nhưng trên thực tế, tất cả những gì họ đang làm là liên kết một tài khoản khác.
Đây là một máy trạng thái khá đơn giản. Người dùng quay lại từ bên thứ ba với id tài khoản bên thứ ba. Cơ sở dữ liệu của bạn có thể ở một trong ba trạng thái:
- Tài khoản được liên kết với tài khoản cục bộ và không có cookie phiên nào -> Đăng nhập
- Tài khoản được liên kết với tài khoản cục bộ và có cookie phiên -> Hợp nhất
- Tài khoản không được liên kết với tài khoản cục bộ và không có cookie phiên nào -> Đăng ký
Tài khoản không được liên kết với tài khoản cục bộ và có cookie phiên -> Liên kết tài khoản bổ sung
- Làm cách nào để thực hiện khôi phục tài khoản với các nhà cung cấp bên thứ ba?
Đây vẫn là lãnh thổ thử nghiệm. Tôi chưa thấy một UX hoàn hảo cho điều này vì hầu hết các dịch vụ đều cung cấp cả mật khẩu cục bộ bên cạnh tài khoản của bên thứ ba và do đó tập trung vào trường hợp sử dụng "quên mật khẩu của tôi", không phải mọi thứ khác đều có thể sai.
Với Sled, chúng tôi đã chọn sử dụng "Cần trợ giúp đăng nhập?" và khi bạn nhấp, hãy hỏi người dùng về email hoặc tên người dùng của họ. Chúng tôi tìm kiếm nó và nếu chúng tôi tìm thấy một tài khoản phù hợp, hãy gửi email cho người dùng đó một liên kết có thể tự động đăng nhập chúng vào dịch vụ (tốt cho một lần). Sau khi vào, chúng tôi đưa họ trực tiếp đến trang liên kết tài khoản, nói với họ rằng họ nên xem và có khả năng liên kết các tài khoản bổ sung và hiển thị cho họ các tài khoản bên thứ ba mà họ đã liên kết.