Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Đăng nhập bằng các dịch vụ bên ngoài

Nhập tên người dùng và mật khẩu là một cách để truy cập tài khoản, nhưng đó không phải là cách duy nhất. Trong bài viết này, chúng ta sẽ xem cách bật các dịch vụ bên ngoài (như Google hoặc Facebook) khi đăng nhập vào cơ sở dữ liệu.

Đăng nhập Dịch vụ Bên ngoài là gì?

Cung cấp cho người dùng tùy chọn truy cập tài khoản hệ thống của họ thông qua các dịch vụ bên ngoài đang là xu hướng ngày càng tăng của các nhà thiết kế web. Tùy chọn này có thể cung cấp một số lợi ích, chẳng hạn như cung cấp cho người dùng một tổ hợp tên và mật khẩu ít hơn để ghi nhớ. Nó cũng có thể giúp quản trị viên cá nhân hóa trải nghiệm người dùng.

Khi các ứng dụng web cung cấp đăng nhập dịch vụ bên ngoài, màn hình đăng nhập sẽ giống như hình bên dưới. Người dùng có thể nhập thông tin đăng nhập và mật khẩu của họ hoặc họ có thể nhấp vào nút sẽ chuyển hướng họ đến dịch vụ mà họ chọn (Facebook, Twitter, Google, v.v.), nơi họ sẽ đăng nhập và được chuyển hướng đến ứng dụng ban đầu.

Đây là màn hình đăng nhập mẫu từ Học viện Vertabelo:

Cách hoạt động của tính năng đăng nhập bên ngoài

Việc thêm các dịch vụ đăng nhập bên ngoài yêu cầu một số công việc bổ sung từ các nhà phát triển. Hầu hết các dịch vụ truyền thông xã hội phổ biến sử dụng giao thức có tên là OAuth 2.0 . Chỉ Twitter sử dụng giao thức cũ hơn có tên là OAuth 1.0 . Giao thức cho phép đọc thông tin người dùng như họ tên, email, giới tính, v.v. Thông tin chính xác có sẵn tùy thuộc vào dịch vụ truyền thông xã hội và bất kỳ thông tin nào mà người dùng cung cấp. (Ví dụ:có thể có tài khoản Facebook mà không cần địa chỉ email đính kèm.) Mặc dù vậy, chúng tôi sẽ tập trung vào cách triển khai hệ thống này trong thiết kế cơ sở dữ liệu.

Như một điểm khởi đầu, chúng tôi sẽ sử dụng bài viết trước của chúng tôi về khôi phục mật khẩu và xác nhận email làm cơ sở. Đây là các bảng liên quan đến người dùng từ bài viết này.




Thiết kế Cơ sở dữ liệu cho Đăng nhập Bên ngoài

Nhiều thông tin trong user_account bảng liên quan đến xử lý xác thực - cộng với các tính năng liên quan như nhắc nhở mật khẩu và xác nhận email - của riêng chúng tôi. Chúng tôi không cần các cột này nếu người dùng xác thực bằng dịch vụ bên ngoài. Dịch vụ bên ngoài xử lý nhắc nhở mật khẩu, xác nhận email và các tính năng khác. Bước đầu tiên trong thiết kế của chúng tôi là tách user_account bảng thành hai bảng:user_accountuser_profile .

user_account bảng hiện xử lý tất cả các sổ kế toán xác thực của riêng nó. user_profile bảng đại diện cho thông tin người dùng thực tế:tên, email, múi giờ, điều khoản chấp nhận dịch vụ, v.v. Tất cả các bảng nghiệp vụ bây giờ phải liên quan đến user_profile bảng.

Bây giờ đến các tài khoản bên ngoài. OAuth cuối cùng, giao thức cung cấp cho chúng tôi một mã định danh cho người dùng trong hệ thống của họ. Số nhận dạng này không phải là tên của người dùng trong hệ thống bên ngoài. Nó chỉ là một định danh cho ứng dụng của chúng tôi. Chúng tôi phải lưu trữ id nội bộ này trong cơ sở dữ liệu của chúng tôi. Chúng tôi có thể thêm các cột có thể rỗng facebook_id , google_id , twitter_id , v.v. vào bảng user_profile . Nhưng chúng tôi sẽ làm điều gì đó khác biệt.

Chúng tôi sẽ thêm các bảng mới:facebook_account , twitter_account , google_account , sẽ lưu trữ id bên ngoài. Bằng cách này, nếu cần, chúng tôi có thể thêm thông tin bổ sung cụ thể cho từng trang web xã hội. Nếu chúng tôi muốn thêm khả năng đăng nhập cho một trang web xã hội khác, chúng tôi sẽ không phải thay đổi user_profile bàn. Chúng tôi sẽ chỉ thêm một external_service_account bảng.

Mỗi bảng mới có cùng định dạng cột. Một trong số chúng sẽ là int user_profile_id , vừa là khóa ngoại tham chiếu đến cột id trong user_profile bảng và khóa chính. (Điều này có thể đóng vai trò là khóa chính vì không có hai tài khoản nào trong hệ thống của chúng tôi được liên kết với nhiều tài khoản của cùng một dịch vụ bên ngoài.)

Cột còn lại sẽ là id của tài khoản bên ngoài - facebook_id , ví dụ. Có một ràng buộc duy nhất đối với mỗi facebook_id , google_idtwitter_id cột. Chúng tôi biết không có hai tài khoản nào được cấp cùng một id. Trên thực tế, khi người dùng được xác thực bằng dịch vụ bên ngoài, chúng tôi biết facebook_id của họ . Khi chúng tôi tìm thấy hàng tương ứng trong facebook_account bảng và tìm đúng user_profile , chúng tôi biết người dùng nào vừa đăng nhập vào hệ thống. Nếu không có hàng nào có id này, chúng tôi tạo một hàng mới trong user_profile và một hàng mới trong bảng tài khoản thích hợp.

Đây là mô hình cuối cùng:





  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mô hình dữ liệu nền tảng cho vay ngang hàng

  2. Tra cứu bảng trong công việc IRI tương thích với sắp xếpCL

  3. Phỏng vấn Oren Eini của RavenDB về quản lý cơ sở dữ liệu, phân tích và bảo mật

  4. Làm thế nào để thực hiện câu lệnh IF trong SQL?

  5. Salesforce SOQL từ Apache OpenOffice