2012-02-08 32 views
6

Làm cách nào để đăng xuất bằng cách sử dụng api của Facebook đăng xuất khỏi ứng dụng của tôi (trang web), nhưng hãy đăng nhập vào facebook.com?Facebook API Đăng xuất khỏi ứng dụng của tôi nhưng không phải facebook

này đăng nhập tôi trong ổn:

window.fbAsyncInit = function() 
{ 
     FB.init({ 
      appId  : '<?= APP_ID ?>', 
      status  : true, 
      cookie  : true, 
      xfbml  : true, 
      oauth  : true, 
     }); 

    FB.Event.subscribe('auth.login', function(response) 
    {alert(response); 
      window.location = 'http://reviewsie.com/accounts/facebook'; 
     }); 

    }; 

    (function(d) 
{ 
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     d.getElementsByTagName('head')[0].appendChild(js); 
    }(document)); 

Nhưng sau đó tôi bấm logout trên trang web của tôi mà tôi giết phiên tôi để ứng dụng của tôi. Sau đó, khi bạn bấm vào fb: login-button một lần nữa, nó chỉ mở và đóng và không làm bất cứ điều gì bởi vì tôi vẫn còn kết nối với facebook. Tôi muốn nó chuyển hướng.

Nhưng nếu khi tôi đăng xuất, tôi cũng sử dụng Facebook :: logoutUrl nó đăng xuất tôi ra khỏi ứng dụng VÀ facebook của tôi mà không phải là những gì tôi muốn.

+0

Vui lòng dán mã. Bạn đã thử cái gì? –

+0

đã đăng mã của tôi và tôi bị kẹt trên số này – cdub

+0

unset ($ _ SESSION ['fb_APPID_user_id']); –

Trả lời

3

Bạn có chắc chắn muốn chỉ đăng xuất khỏi ứng dụng của mình chứ không phải fb, nếu bạn đã đăng nhập bằng fb? Những loại ứng dụng có thể muốn làm một cái gì đó như thế? Và tại sao? Lợi ích của việc làm như vậy là gì?


Nhưng nếu bạn thực sự muốn (hack), trong index.php:

<?php 
require 'init.php'; // general init 
require 'init_fb.php'; // sets $fb_id if logged in to fb 

if (isset($fb_id) and !isset($_SESSION['do_not_auto_login'])) { 
    echo "<a href='/logout'>Logout</button>"; 
    include 'app.php'; 
    return; 
} 

if (isset($_SESSION['do_not_auto_login']) 
    echo "<a href='/re_login'>FB Login</button>"; 
else include 'html_and_js_fb_login_code_and_button.php'; 

include 'startpage.php'; 
?> 

và trong logout.php:

$_SESSION['do_not_auto_login'] = true; 
// destroy-code 

và trong re_login.php:

unset($_SESSION['do_not_auto_login']); 
header("location: /"); // re-direct back to index.php 

Không hoàn hảo nhưng hoạt động tốt. Hy vọng bạn nhận được hack!


Nhưng vẫn còn, tại sao ?? Nếu bạn không nghĩ rằng người dùng của mình muốn quay lại, hãy hỏi "Cách xóa ứng dụng fb của tôi khỏi người dùng?" hoặc thay vào đó hoặc thử câu trả lời của @ DMCS .. Tại sao?

1

Bạn cần phải sử dụng destroySession cho Facebook để làm

www.example.com?act=logout

<?php 
php sdk blah blah 


if($_GET['act'] =='logout'){ 
    $facebook->destroySession(); 

} 
$params = array(
'scope' => 'read_stream, friends_likes', 
'redirect_uri' => 'https://www.myapp.com/post_login_page' 
); 

$loginUrl = $facebook->getLoginUrl($params); 

?> 

Có lẽ bạn cần phải thiết lập param để làm cho nó chuyển hướng.

+0

vẫn không hoạt động: o ( – cdub

+0

khi u đăng xuất từ ​​trang web ur, u dun wan để đăng nhập facebook. khi u nhấp vào đăng nhập, u wan nó để chuyển hướng đến một trang cụ thể? Wat u này muốn? – Leon

+0

nếu u wan đăng xuất từ ​​các trang web ur oni.chỉ cần sử dụng $ facebook-> destroySession(); , không sử dụng getLogoutURL. – Leon

0

Khi người dùng đăng nhập vào ứng dụng của bạn, hãy gửi cuộc gọi HTTP DELETE tới /me/permissions bằng mã thông báo truy cập hiện tại của họ. Thao tác này sẽ đăng xuất chúng ra khỏi ứng dụng của bạn yêu cầu chúng xác thực lại nếu chúng muốn chơi thêm một số ứng dụng khác. Ngoài ra hãy chắc chắn để tiêu diệt các phiên php sử dụng mã thanh toán bù trừ phiên php bình thường.

+0

Tôi không nghĩ anh ấy muốn xóa quyền !! Chỉ cần đăng xuất bình thường !! @DMCS –

+0

"Làm cách nào để đăng xuất bằng cách sử dụng api của Facebook đăng xuất khỏi ứng dụng của tôi (trang web), nhưng hãy đăng nhập vào facebook.com?" Đây là câu hỏi của họ, phải không? Cách duy nhất để buộc reauth là xóa mã thông báo xác thực hiện tại (ít nhất là theo cách này vào tháng 2 năm 2012 .. có thể Facebook đã thay đổi điều gì đó). Hãy khai sáng cho chúng tôi cách bạn trả lời câu hỏi của họ. – DMCS

+0

@LeonardPauli giải pháp rất tốt đẹp cho vấn đề này, tôi ngạc nhiên rằng vấn đề này dường như rất có liên quan đến trang web của nhiều người đã thu hút được rất ít sự chú ý. Tôi không làm bất cứ điều gì trong PHP (C# cho tôi) để học một cái gì đó mới luôn luôn là vui vẻ. – DMCS

6

này làm việc cho tôi:

window.fbAsyncInit = function() { 

FB.getLoginStatus(function(response) { 

    FB.api("/me/permissions", "delete", function(response){ 


    }); 

}); 

} 
6

Một hơi muộn nhưng có thể giúp đỡ một ai đó. Bạn có thể thu hồi các quyền của ứng dụng để đăng xuất chúng khỏi ứng dụng của bạn một cách hiệu quả. Đây là mã:

FB.api('/me/permissions', 'delete', function(response) { 
    console.log(response.status); // true for successful logout. 
}); 
Các vấn đề liên quan