2011-02-01 47 views
7

khi người dùng chấp nhận ứng dụng facebook từ trang web của tôi, tôi lưu trữ chi tiết người dùng và chi tiết facebook (mã thông báo truy cập) trong cơ sở dữ liệu.Người dùng Facebook hủy cấp phép ứng dụng

khi anh ấy xóa ứng dụng của tôi khỏi facebook tôi muốn xóa chi tiết khỏi cơ sở dữ liệu. làm như thế nào?

Tôi có thể hủy cấp quyền gọi lại. nếu một số loại bỏ ứng dụng, nó sẽ chuyển hướng đến trang này. nhưng, wt nên là mã ở đây để xóa dữ liệu từ db? Tôi có nghĩa là, khi nó chuyển hướng, nó sẽ đăng chi tiết mã thông báo truy cập, để tôi có thể tính phí mã thông báo truy cập fro và xóa hàng đó.

+1

Sẽ không mất nhiều thời gian để tìm hiểu hơn là viết câu hỏi tại đây. Tạo một trang gửi email nội dung của $ _REQUEST/$ _ GET/$ _ POST cho bạn. Đặt URL gọi lại của bạn. Ủy quyền sau đó hủy cấp quyền cho chính bạn. Kiểm tra email và bạn sẽ biết chính xác dữ liệu nào bạn có sẵn. –

Trả lời

13

Nó nêu rõ trong authentication document:

App Deauthorization

Khi người dùng của ứng dụng của bạn loại bỏ nó trong Bảng điều khiển ứng dụng hoặc các khối ứng dụng trong News Feed, ứng dụng của bạn có thể được thông báo bằng cách chỉ định Deauthorize URL gọi lại trong Ứng dụng dành cho nhà phát triển. Trong khi xóa ứng dụng, chúng tôi sẽ gửi yêu cầu HTTP POST chứa một thông số duy nhất, signed_request, trong đó chứa id người dùng (UID) của người dùng vừa xóa ứng dụng của bạn. Bạn sẽ không nhận được mã thông báo truy cập của người dùng trong số yêu cầu này và tất cả người dùng hiện tại mã thông báo truy cập sẽ tự động bị hết hạn.

Vì vậy, bằng cách sử dụng chức năng signed_request trên docuement riêng của mình:

<?php 
function parse_signed_request($signed_request, $secret) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
    error_log('Unknown algorithm. Expected HMAC-SHA256'); 
    return null; 
    } 

    // check sig 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
    error_log('Bad Signed JSON signature!'); 
    return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 

$result = parse_signed_request($_REQUEST['signed_request'],"APP_SECRET"); 


$myFile = "deauthorize.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
fwrite($fh, $result["user_id"] . "\n"); 
fclose($fh); 

?> 

Vì vậy, tất cả các bạn cần làm là có được $result["user_id"] truy vấn DB của bạn và loại bỏ các kỷ lục.

P.S: Tôi khuyên bạn nên thêm trường mới có tên active và chỉ hủy kích hoạt người dùng thay vì xóa toàn bộ bản ghi.

EDIT:
Facebook sẽ KHÔNG chuyển hướng người dùng đến URL hủy cấp phép! nó sẽ ping nó chỉ:

Facebook ping URL này khi người dùng deauthorizes ứng dụng của bạn

+0

Đây chính là điều cần thiết.Đừng quên thay thế APP_SECRET bằng app_secret thực tế của bạn. – testing123

0

Mã này không hoạt động, mặc dù nó được gọi khi người dùng deauthorizes ứng dụng dữ liệu chỉ qua vào hàm là "1" (Được thử nghiệm với người dùng thử và tài khoản FB của riêng tôi khi ứng dụng hoạt động)

file_put_contents ("test.txt", $ fbUserId. "". print_r ($ _ REQUEST ['signed_request']));

trong tệp test.txt "1"

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