2011-01-05 41 views
10

Tôi đang xây dựng một ứng dụng web (PHP) sử dụng kết nối FB. Tôi đăng ký thành công/đăng nhập người dùng với sự trợ giúp của lib PHP được cung cấp bởi facebook. Ngoài ra tôi có thể đăng lên tường, sử dụng mã nàyTôi có thể lưu mã thông báo truy cập Facebook và sử dụng sau này không?

 Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 
    Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;    
    $facebook = new Facebook(array(
     'appId' => $fb_key, 
     'secret' => $fb_secret, 
     'cookie' => true, // enable optional cookie support 
    )); 
    $session = $facebook->getSession(); 
    if ($session) 
    { 
     $facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));     
    } 

Tuy nhiên, nếu tôi truy cập thủ công vào trình quản lý cookie của trình duyệt và xóa cookie không hoạt động. Điều duy nhất tôi có là ID FB của người dùng mà tôi lưu trữ trong DB. Có cách nào để đăng lên tường của người dùng ngay cả khi phiên FB bị mất không? Bạn có lưu ý mã thông báo truy cập FB của người dùng trong DB để đăng lên tường sau hoặc mã thông báo truy cập tương đối ngắn ngủi không?

Dưới đây là ví dụ về tình huống có thể xảy ra trong ứng dụng của tôi: người dùng nhấp vào nút fb, cho phép ứng dụng của tôi được chuyển hướng trở lại trang web của tôi nơi tôi tự động tạo tài khoản dựa trên dữ liệu do FB cung cấp. để tôi có thể đăng nhập người dùng này sau. Bây giờ anh duyệt trang web, nhập một số thông tin và thông tin này được đăng lên tường của anh ấy. Mọi thứ đều tốt cho đến nay bởi vì trình duyệt của người dùng giữ cookie được tạo bởi FB. Bây giờ người dùng rời khỏi trang quản trị site và liên hệ. Quản trị viên mở trình duyệt của riêng mình, chuyển đến giao diện quản trị và đăng nội dung nào đó thay mặt cho người dùng này. Bây giờ, có ID FB của người dùng đó và giả định rằng người dùng đó đã không thu hồi quyền, tôi vẫn có thể đăng bức tường này lên tường của anh ấy không?

Trả lời

8

CẬP NHẬT: Câu trả lời này không còn giá trị như offline_access không được dùng nữa.

Bạn cần yêu cầu quyền truy cập offline_access. Kiểm tra tài liệu permissions.

EDIT Mỗi lần cập nhật và nhận xét - có thể tìm thấy một số thông tin về việc xóa ngoại tuyến_access here.

+0

Cảm ơn, hoạt động tuyệt vời! – Eugene

+4

Điều này sẽ không được chấp nhận. Hãy thử sử dụng access_token 60 ngày. – funerr

23

Với Facebook PHP SDK v3 (see on github), việc hỏi và sử dụng mã thông báo truy cập ngoại tuyến của người dùng khá đơn giản. Đây là cách bạn làm điều đó.

Get access token

Đầu tiên ẩn bạn kiểm tra nếu người dùng đang đăng nhập hay không:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$user = $facebook->getUser(); 

if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    $user = null; 
    } 
} 

Nếu ông không phải là, bạn tạo ra các "Login with Facebook" URL yêu cầu các offline_access phép:

if (!$user) { 
    $args['scope'] = 'offline_access'; 
    $loginUrl = $facebook->getLoginUrl($args); 
} 

Và sau đó hiển thị các liên kết trong mẫu của bạn:

<?php if (!$user): ?> 
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a> 
<?php endif ?> 

Sau đó, khi người dùng đăng nhập, bạn có thể truy xuất mã thông báo truy cập ngoại tuyến và lưu trữ. Để có được nó, hãy gọi:

if ($user) { 
    $token = $facebook->getAccessToken(); 
    // store token 
} 

Sử dụng truy cập ẩn thẻ

Để sử dụng access token ẩn khi người dùng không đăng nhập:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$facebook->setAccessToken("..."); 

Và bây giờ bạn có thể thực hiện cuộc gọi API cho người dùng này:

$user_profile = $facebook->api('/me'); 

Hy vọng điều đó sẽ hữu ích!

+2

Câu trả lời tuyệt vời. Bạn nên viết tài liệu Facebook, bởi vì nó tốt hơn so với những gì đã có –

+0

Cảm ơn Michael :) – Quentin

+0

Giải pháp rất tuyệt vời mà tôi đã tìm kiếm trong 3 ngày. –

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