2010-04-30 8 views
5

Khi người dùng truy cập vào trang web của tôi chứa ứng dụng facebook lần đầu tiên, nó yêu cầu anh ta cho phép nó và anh ta được nhắc làm điều đó, sau đó tôi nhận được mã mà tôi có thể chuyển đổi thành access_token. Càng xa càng tốt.Facebook access_token: làm thế nào để nhận được nó khi người dùng chấp nhận ứng dụng của tôi?

Nhưng làm cách nào để nhận mã thông báo khi người dùng đã truy cập trang web? Miễn là biểu mẫu mã thông báo này lần đầu tiên hoạt động, mọi thứ đều ổn. Nhưng làm cách nào để nhận được mã thông báo khác khi người dùng đã cho phép ứng dụng một tuần trước và chỉ truy cập lại vào trang của tôi?

+0

Bạn đang tìm kiếm bằng bất kỳ ngôn ngữ cụ thể nào? – Steve

Trả lời

0

Tôi sử dụng phương pháp cookie để lưu trữ access_token trên máy tính của người dùng.

FB.init({appId: 'your app id', status: true, cookie: true, xfbml: true}); 

Trong file facebook.php của bạn, bạn cần phải thiết lập cookieSupport là true thì:

private $cookieSupport = true; 

Hoặc sử dụng chức năng get_facebook_cookie tìm thấy ở đây: Single sign-on with the JavaScript SDK

Các access_token sau đó được lưu trữ trong một cookie được gọi là "fbs_APPID" (hết hạn). Nếu bạn muốn cookie kéo dài hơn sau đó một vài giờ, bạn cần phải yêu cầu quyền mở rộng 'offline_access':

Cho phép ứng dụng của bạn thực hiện yêu cầu được ủy quyền thay mặt người dùng bất kỳ lúc nào. Theo mặc định, hầu hết mã thông báo truy cập sẽ hết hạn sau một khoảng thời gian ngắn để đảm bảo các ứng dụng chỉ thực hiện các yêu cầu thay mặt cho người dùng khi chủ động sử dụng ứng dụng. Quyền này làm cho mã thông báo truy cập được trả về bởi điểm cuối OAuth của chúng tôi đã tồn tại lâu dài.

+0

Vì vậy, cách duy nhất để nhận ra người dùng là lưu mã thông báo vào cookie? – hoktar

+0

Nếu bạn kiểm tra hàm getSession() bên trong facebook.php, bạn thấy rằng chúng xây dựng phiên từ $ _GET hoặc $ _COOKIE. – Jens

-2

sử dụng php

session_start(); 
// Create our Application instance. 
$facebook = new Facebook(array(
       'appId' => FACEBOOK_APP_ID, 
       'secret' => FACEBOOK_APP_SECRET, 
       'cookie' => true, 
       'domain' => 'example.com' 

)); 

$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    try { 
     $uid = $facebook->getUser(); 
     $me = $facebook->api('/me'); 
     $_SESSION['me'] = $me; 
     $_SESSION['uid'] = $uid; 
     $_SESSION['session'] = $session; 

    } catch (FacebookApiException $e) { 
     error_log($e); 
    } 
} 

bạn có thể tham khảo các access_token qua $ _SESSION [ 'phiên'] [ 'access_token'] trong ứng dụng của bạn ,, để biết thêm theres hướng dẫn qua tại fbdevtutorials.com

4

Giờ đây, Facebook đang di chuyển sang Oauth2, cookie được tạo bởi Javascript là khác nhau. Tôi có nó để làm việc cho tôi và thêm nó vào một ngã ba của plugin FGraph cho Rails - https://github.com/imme5150/fgraph

Một trong những thủ thuật là khi bạn yêu cầu access_token từ tham số "mã" được lưu trữ trong cookie, bạn phải vượt qua trong "redirect_uri", nhưng bạn muốn nó được để trống.

3

Trên luồng phía máy khách, bạn có thể chuyển hướng người dùng đến hộp thoại OAuth với quyền trong tham số phạm vi. Nếu người dùng đã chấp nhận Ứng dụng và quyền của bạn, anh ta sẽ được chuyển hướng đến "redirect_uri" của bạn bằng access_token trong phân đoạn URI, nếu không các quyền cần thiết sẽ được nhắc.

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream&response_type=token 

Trên server-side chảy bạn nên có "mã", do đó bạn có thể mua lại nó cho một access_token trên endpoint OAuth:

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URLclient_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE 

Tài liệu: https://developers.facebook.com/docs/authentication/