10

Tôi hơi bối rối về cách hoạt động của facebook.logout (ngữ cảnh).Cách đăng xuất hoạt động trong Facebook SDK Android

Vì ngay cả sau khi gọi đăng xuất, tôi có thể truy cập thông tin yêu cầu auth_token. Vậy làm thế nào mà thậm chí có thể? Tôi đã xem qua chủ đề này, cho phép tôi hơi bối rối: https://stackoverflow.com/a/6597688/487940

Sau khi đọc câu trả lời, đây là câu hỏi của tôi: Vì vậy, nếu người dùng cấp quyền truy cập vào ứng dụng [của tôi], anh ấy sẽ luôn được xác thực nếu anh ấy đăng nhập ứng dụng Facebook chính thức? Ngay cả khi tôi cố gắng gọi facebook.logout (ngữ cảnh) trong ứng dụng [của tôi], anh ấy sẽ đăng nhập và ứng dụng của tôi sẽ có thể thực hiện cuộc gọi đến Facebook API? '

Rất tiếc, tôi không thể hiểu hành vi này.

CẬP NHẬT: Sau khi đọc phản hồi của Torid, tôi bị nhầm lẫn về hàm facebook.logout(). Mục đích của chức năng này là gì nếu nó không đăng nhập người dùng? Bởi vì, tôi không thấy mục đích gọi mục đích này nữa. Nó không đăng nhập người dùng.

Trả lời

8

Có hai điều độc lập đang diễn ra tại đây: 1) liệu người dùng của bạn đã xác thực ứng dụng của bạn (có quyền) cho Facebook và 2) liệu người dùng của bạn có đăng nhập vào Facebook không.

Yêu cầu xác thực lần đầu tiên người dùng sử dụng ứng dụng của bạn và kéo dài cho đến khi người dùng xác thực rõ ràng (ví dụ: thông qua Cài đặt tài khoản web của Facebook -> Ứng dụng -> Cài đặt ứng dụng).

Đăng nhập có thể được yêu cầu mỗi khi người dùng khởi động ứng dụng của bạn. Nhưng nếu bạn sử dụng SDK mặc định ủy quyền(), cố gắng thực hiện Đăng nhập một lần (SSO), nếu ứng dụng Facebook được đăng nhập, ứng dụng của bạn sẽ tự động được đăng nhập và sử dụng mã thông báo truy cập hiện có.

Nếu bạn đang sử dụng SSO, khi bạn đăng xuất, điều đó không có hiệu lực, vì đăng xuất thực sự sẽ phải đăng xuất ứng dụng Facebook - mà người dùng có thể không thích!

Bạn có thể khắc phục hành vi này bằng cách thực hiện một ủy quyền có dạng

authorize(this, PERMISSIONS, FORCE_DIALOG_AUTH, new LoginDialogListener()); 

mà tránh SSO và buộc đăng nhập hộp thoại. Tất nhiên, điều đó buộc người dùng phải đăng nhập mỗi lần bạn khởi động ứng dụng - trừ khi bạn lưu chi tiết đăng nhập/mã thông báo truy cập trong các bìa (đó là những gì SDK thực hiện - kiểm tra nguồn).

+0

Vì vậy, là facebook.isSessionValid() cách chính xác để kiểm tra xem người dùng có thực sự đăng nhập không? Bởi vì facebook.isSessionValid() sẽ trả về true, ngay cả khi người dùng đã đăng nhập. – harsimranb

+2

Tôi không nghĩ SDK cung cấp cách để biết trạng thái đăng nhập của người dùng là gì khi bạn đang sử dụng SSO. logout() chỉ xóa cookie của ứng dụng/webview của bạn và vô hiệu hóa accessToken. Và isSessionValid() chỉ kiểm tra xem accessToken có hợp lệ hay không. Vì vậy, sau khi ứng dụng của bạn thực hiện đăng xuất() isSessionValid sẽ trả về false. Nhưng nếu bạn đăng nhập vào ứng dụng vẫn còn đăng nhập. Vì vậy, nếu bạn đăng nhập bằng SSO (mặc định) sẽ kiểm tra bằng ứng dụng Facebook, ứng dụng vẫn có accessToken hợp lệ, sẽ được trả về ứng dụng của bạn mà không phải thông qua người dùng đăng nhập. – Torid

+1

facebook.isSessionValid trả về true, ngay cả sau khi gọi đăng xuất() ... – harsimranb

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