2012-04-11 41 views
11

Tôi đang cố gắng thực hiện đăng nhập bằng chức năng facebook/twitter trong ứng dụng của mình, tôi đọc một số hướng dẫn về oAuth và tôi nghĩ rằng tôi đã hiểu một số khái niệm cơ bản, và đây là những gì tôi hiểu (vui lòng sửa tôi nếu tôi sai):đăng nhập bằng oAuth, tôi nên lưu trữ/sử dụng để xác định người dùng?

  1. myApp gửi yêu cầu đến nhà cung cấp oAuth, nhận mã thông báo yêu cầu (A).
  2. gửi người dùng xác thực (A), trả về bằng (B) mã thông báo yêu cầu xác thực (được gọi là mã thông báo oAuth?)
  3. sử dụng (B) để nhận mã thông báo truy cập (C).
  4. sử dụng C để truy cập thông tin người dùng.

và đây là những gì tôi không thể có được xung quanh đầu của tôi, cái nào trong số này mà tôi nên sử dụng/lưu trữ để xác định người dùng? tôi nghĩ về khả năng sử dụng từng cái, nhưng im luôn bị kẹt khi kiểm tra xem người dùng đã đăng nhập trước đó chưa ...

Trả lời

10

Nếu tất cả những gì bạn cần chỉ là xác thực thì chỉ lưu trữ user_id là đủ.

Vì vậy, tạo một bảng như:

id | service_name | user_id | my_user_id 

nơi service_name là một trong hai twitter hay facebook, user_id - là id của người dùng từ twitter/facebook và my_user_id là một user_id trong hệ thống xác thực của bạn.

Vì vậy:

SELECT my_user_id FROM oauths WHERE service_name = 'twitter' AND user_id = 42 

sẽ trả lại cho bạn user_id hệ thống của bạn hoặc không có gì

PS: service_name có thể (và nên) được bình thường, tôi giữ nó như là một chuỗi chỉ để đơn giản hóa một ví dụ

PPS: như bạn đã nói trong các nhận xét, có thể bạn sẽ muốn "đăng/tweet".

Trong trường hợp đó, bạn cần lưu trữ mã thông báo truy cập của người dùng cho twitter và không lưu trữ thêm thông tin nào cho facebook, nhưng yêu cầu cho phép publish_stream khi xác thực người dùng.

+0

tôi cũng đang suy nghĩ về việc đăng/tweet, nhưng bởi user_id, ý của bạn là lưu trữ user_id mà chúng tôi có thể truy cập bằng mã thông báo truy cập? – hndr

+0

@that_guy: vâng. User_id từ nhà cung cấp oauth – zerkms

+0

@that_guy: btw, được thêm vào bài đăng – zerkms

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