2012-06-04 25 views

Trả lời

4

Khi người dùng đã kết thúc chảy máy chủ xác thực phía người sử dụng đã được ủy quyền cho ứng dụng của bạn, tất cả các bạn cần làm là sử dụng FB.getLoginStatus phương pháp:

FB.getLoginStatus(function(response) { 
    if (response.status === "connected") { 
     console.log("authResponse: ", response.authResponse); 
     FB.api("me", function(response2) { 
      console.log("Hey there " + response2.name); 
     }); 
    } 
    else if (response.status === "not_authorized") { 
     // user is logged in to facebook but hasn't authorized your app, should not happen if he went through the server side authentication 
    } 
    else { 
     // user is logged out of facebook, also should not happen 
    } 
} 

Như bạn có thể nhìn thấy bạn chỉ có thể sử dụng sDK js để truy vấn đồ thị, không có nhu cầu để có được những dấu hiệu bằng tay, nhưng trong trường hợp bạn vẫn cần nó, authResponse nên có định dạng sau:

authResponse: { 
    accessToken: "aaaaaaa", 
    expiresIn: "bbbbbb", 
    signedRequest: "cccccc", 
    userID: "dddddd" 
} 

Chỉnh sửa

Nếu người dùng đăng nhập vào facebook và đã cho phép và tương tác với ứng dụng của bạn thì có getLoginStatus phải trả lại mã thông báo truy cập hợp lệ.
Có một vài trường hợp trong đó không phải như vậy, một trong số đó là mã thông báo đã hết hạn.

Vì nó nói trong Handling Invalid and Expired Access Tokens:

Desktop Web và Mobile ứng dụng Web mà thực hiện xác thực với Javascript SDK

Calling FB.getLoginStatus() hoặc tình trạng đảm bảo: đúng được thiết lập khi bạn gọi gọi FB.init() có nghĩa là lần sau khi người dùng truy cập vào ứng dụng của bạn và được đăng nhập vào Facebook, đối tượng authResponse bạn được chuyển thành kết quả của các cuộc gọi đó sẽ chứa thông tin mới, mã thông báo truy cập hợp lệ .

Trong trường hợp này, nó chỉ đơn giản là hành động của người dùng sử dụng ứng dụng của bạn mà ngầm tạo ra một mã thông báo truy cập mới.

+0

Cảm ơn đây là điều tôi chưa hề rõ ràng. Chỉ để đảm bảo tôi hiểu. Khi người dùng đã ủy quyền ứng dụng của tôi (cho dù điều này được thực hiện trên máy chủ hoặc máy khách) thì getLoginStatus sẽ luôn trả về một authToken hợp lệ và một tầng "được kết nối" và tôi sẽ không cần phải thẩm định lại chúng không? –

+0

Đã chỉnh sửa câu trả lời của tôi –

+0

Giải pháp này hoạt động tốt, cảm ơn. Tôi chỉ có một vấn đề, response.status đã trả về null khi tôi mở trang của tôi chưa được yêu cầu và trước khi làm mới nó, hãy đăng nhập vào một tab khác. Để giải quyết nó, tôi phải chuyển một tham số thứ hai tới FB.getLoginStatus: "true", để buộc SDK thực hiện một yêu cầu mới đối với Facebook và cập nhật chính xác trạng thái đăng nhập. Theo bài viết sau, Facebook lưu trữ phản hồi FB.getLoginStatus. https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/ –

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