2011-10-03 7 views
6

LƯU Ý: Ứng dụng (web) của chúng tôi hoạt động tốt cho đến khi chúng tôi nâng cấp lên luồng công việc Oauth 2.0 vào cuối tuần qua.FB auth.logout đang được cập nhật sau khi đăng nhập bằng cách sử dụng "quy trình làm việc phía máy chủ" (OAuth 2.0)

Khi người dùng "kết nối với facebook" vào ứng dụng (web) của chúng tôi, chúng tôi đăng nhập vào Facebook bằng cách sử dụng "luồng công việc phía máy chủ" được mô tả trong Facebook Authentication docs. Tuy nhiên, Facebook đang nâng cao sự kiện auth.logout khi người dùng nhận được để trang chủ của họ trong ứng dụng của chúng tôi, trong đó có các mã javascript sau:

window.fbAsyncInit = function() { 
    FB.init({appId: 'XXX', status: true, cookie: true, xfbml: true, channelUrl: 'http://XXX/fbchannel.html', oauth: true}); 
    FB.Event.subscribe('auth.logout', function(response) { 
     logout(); 
    }); 
}; 
(function() { 
    var e = document.createElement('script'); 
    e.type = 'text/javascript'; 
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
    e.async = true; 
    document.getElementById('fb-root').appendChild(e); 
}()); 
function logout(){ 
    new Ajax.Request('http://XXX/logout'); 
} 

Dường như khi người dùng đang đăng nhập vào Facebook, họ chưa đăng nhập vào ứng dụng của chúng tôi (nếu bạn có facebook.com mở trong tab thứ 2 của trình duyệt và tải lại trang sau khi đăng nhập bằng ứng dụng của chúng tôi, bạn sẽ thấy rằng bạn thực sự đã đăng nhập vào facebook.com).

Có bước bổ sung nào trong OAuth 2.0 cần phải thực hiện để đăng nhập người dùng vào ứng dụng của chúng tôi khi sử dụng "quy trình làm việc phía máy chủ" không cần thiết trong phiên bản OAuth trước không? Người dùng có phải đăng nhập một cách rõ ràng qua facebook sau khi được kết nối không?

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn trước, Jason

PS-Logging vào ứng dụng của chúng tôi thông qua dòng phía khách hàng (sau khi bạn đã kết nối trước đây) hoạt động tốt. Chỉ khi kết nối và đăng nhập qua luồng công việc phía máy chủ, chúng tôi mới gặp phải sự cố đăng xuất tự động.

+3

tôi đã có thể khắc phục vấn đề này bằng cách thêm một cuộc gọi đến FB.getLoginStatus trong xử lý sự kiện auth.logout tôi và kiểm tra phản ứng cho đối tượng authResponse. Tôi không biết tại sao Facebook tăng auth.logout khi FB.getLoginStatus trả về một authResponse cho biết rằng người dùng đã đăng nhập, nhưng nó thực hiện. Vì vậy, đây là một hack: FB.Event.subscribe ('auth.logout', chức năng (phản hồi) { FB.getLoginStatus (function (res) { nếu (! Res.authResponse) { đăng xuất(); } }); }); – Jason

+0

Tìm thấy tuyệt vời! Tôi tự hỏi nếu nó vẫn xảy ra hoặc nếu Facebook đã sửa lỗi này ... – DMCS

+0

Tôi vừa bắt đầu thấy hành vi này trong đơn đăng ký của tôi hôm nay. Tôi đến với cùng một hack như bạn nhưng tôi là một chút khó chịu với nó. –

Trả lời

0

Đối với các trang ajax, bạn cần nhận mã uid, access_token và mã từ phiên trình duyệt.

Đây là tiêu chuẩn cho iframe và ajax để phòng ngừa spam và các rủi ro bảo mật khác. SEE: http://tools.ietf.org/html/rfc6749#section-10.13


NHANH VÀ VÍ DỤ DIRTY:

<?php 
// be sure to exchange YourAppId, with your app id. 

if(isset([fb_YourAppId_user_id])){ 
$user = [fb_YourAppId_user_id]; 
}else { // no user, send to login flow. } 

if(isset([fb_YourAppId_access_token])){ 
$access_token = [fb_YourAppId_access_token]; 
} else { // no user, send to login flow } 

?>