2009-09-06 33 views
16

Tôi đang cố gắng xây dựng một ứng dụng Connect bằng cách sử dụng PHP và khung công tác Zend. Tôi cũng có một hệ thống xác thực người dùng dựa trên Zend_Auth. Bây giờ, tôi có thể đăng nhập bằng Facebook nhưng đăng xuất không hoạt động.Cách đăng xuất người dùng bằng cách sử dụng Facebook Connect trong PHP và Zend?

Tôi cần xóa thông tin nhận dạng Zend_Auth cũng như xóa tất cả thông tin đăng nhập Facebook. Cách tốt nhất để làm điều này là gì?

tôi đã cố gắng facebook_client->expire_session()facebook_client->clear_cookie_state(); với nhau và cũng facebook_client->logout($next) sau khi gọi Zend_Auth::getInstance()->clearIdentity()

Không ai trong số họ có vẻ làm việc.

Trả lời

20

Bạn phải gọi đăng xuất khách hàng javascript trước tiên, sau đó gửi chúng đến tập lệnh đăng xuất php của bạn. Vì vậy, hãy gọi .js:

FB.Connect.logoutAndRedirect("/path/to/zend/logout/controller"); 

Bạn sẽ thấy một popup modal nói rằng "Cậu đang đăng xuất khỏi trang web này và facebook * Bạn sẽ được chuyển đến bất cứ nơi nào kịch bản logout của bạn là:

try 
{ 
    $facebook->expire_session(); 
} 
catch (FacebookRestClientException $e) 
{ 
    //you'll want to catch this 
    //it fails all the time 
} 

tôi thường cũng gọi chức năng này trong logout kịch bản PHP, chỉ để được an toàn:

/** 
* Remove the local Facebook cookies that get set manually 
* 
* @return void 
*/ 
protected function _killFacebookCookies() 
{ 
    // get your api key 
    $apiKey = $this->getConfig()->getApiKey(); 
    // get name of the cookie 
    $cookie = $this->getConfig()->getCookieName(); 

    $cookies = array('user', 'session_key', 'expires', 'ss'); 
    foreach ($cookies as $name) 
    { 
     setcookie($apiKey . '_' . $name, false, time() - 3600); 
     unset($_COOKIE[$apiKey . '_' . $name]); 
    } 

    setcookie($apiKey, false, time() - 3600); 
    unset($_COOKIE[$apiKey]);  
} 
+0

Cảm ơn! Nó hoạt động! :) – Abhinav

+0

yeap, hoạt động! Kiểm tra nó mà không có hàm bổ sung _killFacebookCookies(), hoạt động tốt. – Alex

0

bạn có thể đăng xuất người dùng facebook và chuyển hướng người dùng đến trang web của bạn với mã PHP như thế này:

tiêu đề ("Vị trí:". $ facebook-> getLogoutUrl (mảng ('next' => "http://yourwebsite.com/redirectAfterFacebookLogout.php")));

0

(NEW FACEBOOK SDK) Đối với tôi, getconfig() sẽ không hoạt động. Tôi phải tìm các hàm mới từ tệp base_facebook.php và thêm bit mã này vào đó. Sau đó gọi nó trong tập tin gọi điện của bạn. Trước khi bạn làm, hãy gọi $ facebook-> destroySession();

public function _killFacebookCookies() 
    { 
     // get your api key 
     $apiKey = $this->getAppId(); 
     // get name of the cookie 
     $cookie = $this->getSignedRequestCookieName(); 

     $cookies = array('user', 'session_key', 'expires', 'ss'); 
     foreach ($cookies as $name) 
     { 
      setcookie($apiKey . '_' . $name, false, time() - 3600); 
      unset($_COOKIE[$apiKey . '_' . $name]); 
     } 

     setcookie($apiKey, false, time() - 3600); 
     unset($_COOKIE[$apiKey]);   
    } 
Các vấn đề liên quan