2012-01-11 39 views
15

Tôi đang cố gắng để đăng nhập người dùng ra khỏi facebook với Facebook JS SDK, tuy nhiên gọi:Facebook JS SDK FB.logout() không chấm dứt phiên người dùng

FB.logout(function(response){ 
    console.log(response); 
}); 

lợi nhuận: response.status == "đã kết nối"

Và chỉ sau khi làm mới trang, SDK mới nhận ra rằng phiên đã kết thúc. Có ai biết điều gì có thể gây ra hành vi này không? Mã này trước đây đã hoạt động trong ứng dụng của tôi và gần đây đã bắt đầu hoạt động theo cách này.

Một ví dụ khác sử dụng Firebug:

enter image description here

+0

Khi gọi đăng xuất và trước khi làm mới trang của bạn, nếu bạn truy cập Facebook, bạn vẫn đang kết nối chưa? Nếu bạn gọi đăng xuất hai lần liên tiếp, đó có phải là phản hồi giống nhau không? (nếu không phải nó chỉ là vấn đề thời gian giữa các cuộc gọi và phản hồi?) (Và, ngay cả khi nó không trả lời phần "tại sao", bạn không thể sửa lỗi này bằng cách tải lại trang trong phản hồi?) Oh và, cuối cùng, "không xác định" là một console.log tôi đoán? –

+0

@Flow 'S, Có' không xác định 'là nhật ký bảng điều khiển không liên quan. FB.logout() không đăng nhập người dùng ra khỏi facebook, nhưng đối tượng FB trang hiện tại không nhận ra nó cho đến sau khi làm mới. Tôi rất muốn không phải làm mới trang theo cách thủ công sau khi người dùng đăng xuất. Ngoài ra tôi đã cố gắng xóa cookie fbsr_ để xem liệu điều này có xóa nó không - không có hiệu lực. Điều này trước đây đã hoạt động và chỉ mới thay đổi gần đây. Ngoài ra, tôi đã thử cùng một thử nghiệm trên hulu.com sử dụng FB JS SDK, cùng một kết quả. Đây có phải là lỗi trong SDK không? –

+0

Tôi hiện đang sử dụng 'FB.getLoginStatus' từ cuộc gọi lại' FB.logout' để đảm bảo JS-SDK quên người dùng. –

Trả lời

13

https://developers.facebook.com/bugs/245362365535898?browse=search_4f112135664703a96454690 Đây là lỗi trong SDK JS hiện đã được sửa và nó sẽ bị đẩy không quá lâu.
Cho đến lúc đó bạn có thể làm như sau

FB.logout(function(response) { 
    FB.Auth.setAuthResponse(null, 'unknown'); 
    ... 
}); 
+0

Cảm ơn, điều này đã làm việc cho tôi! – Mark

+0

Cảm ơn bạn đã làm việc với tôi và giải quyết vấn đề lớn của tôi, đánh giá cao :) –

+0

Tôi đã thử nó, nhưng, chức năng (phản ứng) không bao giờ được thực hiện, bất kỳ ý tưởng? – simo

1

Tôi có kinh nghiệm tương tự với FB.Logout() không làm việc như đã quảng cáo. Là một workaround tôi sử dụng dưới hàm javascript để kiểm tra nếu người dùng đang đăng nhập và nếu như vậy, chuyển hướng đến https://www.facebook.com/logout.php với URL của trang tiếp theo để nạp và thẻ truy cập của họ:

function reallylogout() { 
     FB.getLoginStatus(function (response) { 
     if (response.authResponse) { 
      window.location = "https://www.facebook.com/logout.php?next=" + 
      'URL to redirect to' + 
      "&access_token=" + response.authResponse.accessToken; 
     } else { 
      $("#loginButtonDiv").show(); 
      $("#logoutButtonDiv").hide(); 
     } 
     }); 
    } 

Các show/hide chút chỉ là jQuery để hiển thị hoặc ẩn các div có nút đăng nhập và đăng xuất trong đó. Nút onclick của nút đăng xuất kích hoạt hàm reallyLogout().

Điều này phù hợp với ứng dụng của tôi.

+0

Tác phẩm này, nhưng tôi thực sự đang tìm kiếm giải pháp có thể kích hoạt FB JS SDK để 'quên' về người dùng đã đăng nhập mà không thực hiện làm mới trang. Cho đến vài tuần trước, điều này đã hiệu quả và tôi đã không thực hiện bất kỳ thay đổi nào kể từ đó. –

3

Xem http://hustoknow.blogspot.com/2012/01/dealing-with-zombie-facebook-cookies.html

Khi bạn đăng xuất, một yêu cầu cross-domain được gửi đến Facebook để vô hiệu hóa phiên. Khi bạn nhấn tải lại, một yêu cầu khác sẽ được gửi đến trang web của Facebook - vì FB nhận ra cookie là không hợp lệ, nó sẽ xóa cookie chính xác khỏi trình duyệt của bạn.

Tôi nghi ngờ đó là lỗi regexp về cách họ quên phân tích cú pháp cookie fbm_, được giới thiệu gần đây trong ngày qua. Tôi chỉ ngạc nhiên khi sửa chữa này đã không được đẩy.

1

tôi đã phải đối mặt với loại tương tự của vấn đề. Tôi đã sử dụng FB.getLoginStatus() sau khi Đăng xuất.

-1

Nó có thể không hoạt động vì bạn không bao gồm khóa ứng dụng Facebook của mình. Nó làm việc cho tôi như thế này:

Ext.get('auth-logoutlink').on('click', function(){ 
        FB.getLoginStatus(function (response) { 
        if (response.authResponse) { 
         window.location = "https://www.facebook.com/logout.php?confirm=1&api_key=**MYAPIKEY**&next=" + 
         '**MYWEBSITEURL**' + 
         "&access_token=" + response.authResponse.accessToken; 
        } else { 
         //HIDE **LOGOUT BUTTON** 
         //SHOW **LOGIN BUTTON** 
        } 
        }); 
     }); 
0

Ok guys Tôi tìm thấy một giải pháp cho việc này:

Đặt lên onClick kiện cho thẻ logout <a> như thế này

onclick="FB.logout(function() { document.location.reload(); });" 

Tất cả với nhau:

<a href="#" 
    id="auth-logoutlink" 
    style="float:left;font-size: small;" 
    onclick="FB.logout(function() { document.location.reload(); });"> 
    [logout] 
</a> 
0

trong ứng dụng asp.net mvc, tôi đã làm như sau.


<a href="javascript:void(0);" class="logOff">Log out</a> 

$(function() { 


    $(".logOff").click(function() { 

     //check if logout is 
     FB.getLoginStatus(function (response) { 
      console.log('inside login status'); 
      if (response.status === 'connected') { 
       // the user is logged in and has authenticated your 
       // app, and response.authResponse supplies 
       // the user's ID, a valid access token, a signed 
       // request, and the time the access token 
       // and signed request each expire 
       var uid = response.authResponse.userID; 
       var accessToken = response.authResponse.accessToken; 
       FB.logout(function (response) { 

        FB.Auth.setAuthResponse(null, 'unknown'); 

       }); 
      } else if (response.status === 'not_authorized') { 
       // the user is logged in to Facebook, 
       // but has not authenticated your app 

      } else { 
       // the user isn't logged in to Facebook. 
       console.log('response status not logged in'); 
      } 
     }); 
     window.location.href = '@Url.Action("LogOff", "Account")'; 

    }); 
+0

'FB.Auth', Auth không tồn tại đối với tôi khi sử dụng Facebook SDK 2.5. – manonthemoon

2
FB.logout(function(response) { 
    ... 
}); 

phương pháp FB.logout Đây là hoạt động 100%. Vấn đề là người dùng đang cố gọi nó từ máy chủ cục bộ không hoạt động.

Vui lòng thử gọi từ máy chủ.

+0

Về trường hợp của tôi, có, bạn là đúng. Nó không hoạt động trên localhost. Tuy nhiên tôi không chắc chắn từ của bạn (làm việc 100%). –

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