2009-10-08 49 views
7

Đây là câu hỏi cơ sở dữ liệu. Tôi có một thư viện openid đã được cài đặt và làm việc.Lưu trữ thông tin OpenID trong cơ sở dữ liệu

Tôi muốn sử dụng OpenID trên trang web mà tôi đang làm việc. Có ba loại người dùng.

  1. tài khoản tên sử dụng email/mật khẩu để xác thực
  2. tài khoản tên sử dụng OpenID để xác thực
  3. tài khoản Anonymous sử dụng OpenID để xác thực

Tất cả những người dùng được lưu trữ trong cùng một bảng đơn giản bảng bình luận. Các tài khoản được đặt tên được liên kết với một blog mà tài khoản có thể quản lý. Người dùng ẩn danh có thể nhận xét về các bài viết trên blog nhưng họ không thể làm gì khác. Nếu người dùng ẩn danh đăng ký tài khoản, tôi muốn tự động chuyển các nhận xét cũ của người dùng đó sang tài khoản được đặt tên. Tôi hiện đang thực hiện việc này bằng cách yêu cầu người dùng điền vào biểu mẫu có tên duy nhất và email hợp lệ.

Hiện tại cả hai bộ tài khoản được lưu trữ trong cùng một bảng bằng lược đồ sau. (Có đó là một di cư đường ray)

create_table :users do |t| 
    t.string :name #unique because it maps to a subdomain 
    t.string :openid_url #unique 
    t.string :email #unique 
    t.string :password_hash 
    t.string :password_salt 
    t.boolean :guest #Anonymous user flag 

    t.timestamps 
end 

(openid_url là duy nhất để ngăn chặn nhiều tài khoản không bị gắn vào openid cùng. email là duy nhất bởi vì người dùng đăng nhập với email/mật khẩu)

Tôi đang sử dụng này Tôi đã gặp sự cố với việc triển khai OpenID của Google. Mỗi người dùng sử dụng Google cho OpenID có cùng url: https://www.google.com/accounts/o8/ud.

Làm cách nào để hỗ trợ sử dụng Google làm nhà cung cấp dịch vụ mở vì url của nó không phải là duy nhất cho mỗi người dùng? (Hãy nhớ ràng buộc tồn tại)

Lưu ý: Tài khoản Google có thể sử dụng bất kỳ địa chỉ email hợp lệ nào trên internet để tôi không thể lưu trữ [email protected] trong trường openid_url vì email có thể là person @ example. com hoặc tệ hơn [email protected]! Yahoo cũng sử dụng phương pháp url duy nhất này vì vậy tôi cũng phải hỗ trợ chúng.

+0

Tại sao bạn cho rằng địa chỉ email là duy nhất? Họ có thể không. Điều gì sẽ xảy ra nếu bạn thấy một lần đăng nhập mở thứ hai và người dùng xác nhận địa chỉ email giống như địa chỉ email bạn đã có? –

+0

Email dành cho các tài khoản được đặt tên không sử dụng openid. Kể từ đó tôi đã thay đổi ứng dụng của mình để sử dụng openid. (Tôi nghĩ rằng có đủ người có tài khoản google/yahoo mà tôi sẽ không gặp vấn đề gì với điều này.) – epochwolf

Trả lời

8

Lưu trữ giá trị openid.claimed_id. Nó là duy nhất cho mỗi người dùng. Google OpenID thực sự là duy nhất. Tất cả đều bắt đầu với cùng một giá trị, nhưng chúng có các truy vấn ?id=uniquenesshere duy nhất. Hãy nhớ rằng các giá trị này nên được coi là phân biệt chữ hoa chữ thường, vì vậy hãy giữ nguyên trường hợp và khớp với trường hợp khi tra cứu người dùng. Bạn chắc chắn không muốn xem xét địa chỉ email là duy nhất vì những lý do bạn đưa ra, cộng với hầu hết các Nhà cung cấp địa chỉ email chưa được xác minh trước (hoặc bạn không thể tin tưởng Nhà cung cấp đã thực hiện điều đó) để lưu trữ trên địa chỉ email là một cách chắc chắn để nhận danh tính người dùng của bạn bị đánh cắp.

-1

openid_url không cần thiết ở đây.Chỉ UserID hoặc tên (duy nhất) hoạt động cho cả hai tài khoản. Bạn cũng có thể tạo bảng riêng biệt với openid và userid từ bảng UserAccount.

Các vấn đề liên quan