5

Tài liệu nói: "redirect_uri - (tùy chọn) URL để chuyển hướng người dùng đến khi quá trình đăng nhập/ủy quyền hoàn tất. URL trên cả thành công và thất bại đăng nhập, vì vậy bạn phải kiểm tra các thông số lỗi trong URL như được mô tả trong tài liệu xác thực.Nếu thuộc tính này không được chỉ định, người dùng sẽ được chuyển hướng đến URL hiện tại (tức là URL của trang nơi này đã được gọi, thường là URL hiện tại trong trình duyệt của người dùng). " Vì vậy, có một phương pháp để bắt nếu người dùng từ chối autnentication/quyền, nhưng liên kết đến tài liệu tương ứng không tồn tại nữa (https://developers.facebook.com/docs/authentication/).facebook php sdk - bắt nếu người dùng không cấp quyền (xác thực không thành công)

Đối với sự đơn giản, redirect_uri là cùng một địa chỉ như là một file php bắt đầu, và mã php đơn giản như:

require 'facebook.php'; 
$facebook = new Facebook(array(
    'appId' => 'X', 
    'secret' => 'Y', 
)); 
$user = $facebook->getUser(); 
if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
if (!$user) { 
    $params = array(
    'scope' => 'read_stream, friends_likes', 
    'redirect_uri' => 'http://myapp.com/app' 
); 
    $loginUrl = $facebook->getLoginUrl($params); 
} 

Bất kỳ ai biết làm thế nào để nắm bắt thông tin đó?

Trả lời

11

Bạn có thể làm sau để kiểm tra các điều khoản:

$permissions = $facebook->api("/me/permissions"); 
if(array_key_exists('publish_stream', $permissions['data'][0])) { 
    // Permission is granted! 
    // Do the related task 
    $post_id = $facebook->api('/me/feed', 'post', array('message'=>'Hello World!')); 
} else { 
    // We don't have the permission 
    // Alert the user or ask for the permission! 
    header("Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream"))); 
} 
+0

Dường như đó là tùy chọn duy nhất hiện có ... Lạ thật, tôi cá là có cách để làm theo cách khác;) –

0

Cần lưu ý rằng trong PHP facebook SDK mới nhất, không có phương pháp -> api. Dường như cũng có vấn đề khi sử dụng séc này (đôi khi) để nhận quyền. Khi sử dụng SDK cũ hơn, đôi khi người dùng nhận được "OAuthException: (# 412)" đã không cài đặt ứng dụng "mặc dù kiểm tra trên trình gỡ lỗi mã thông báo truy cập FB đã cho phép các quyền thích hợp. Sau khi tôi cập nhật lên SDK mới và đã tìm ra cách mới để nhận danh sách dữ liệu đơn giản về quyền, mọi thứ đã hoạt động trở lại.

Tôi mất rất nhiều việc đào bới trong trang web của FB để tìm giải pháp này, vì vậy tôi dán nó vào đây để hy vọng cứu người khác vài giờ. Họ thực sự tiết kiệm cuộc sống là khám phá của tôi về phương pháp getDecodedBody (một thủ thuật rất khó tìm trong FB tài liệu). Ví dụ của tôi chỉ kiểm tra các publication_actions.

$fb = new Facebook\Facebook([ 
    'app_id' => your_app_id, 
    'app_secret' => your_secret, 
    'default_graph_version' => 'v2.2', 
]); 

$badperms=true; //start by assume bad permissions 

try { 
    $response = $fb->get('/me/permissions', $at); 
    $perms = $response->getDecodedBody(); 

    if($badperms){ 
     foreach($perms['data'] AS $perm){ 
      if($perm['permission']=='publish_actions' && $perm['status']=='granted') $badperms=false; 
     } 
    } 

} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    log("MSG-received facebook Response exception!! ".$e->getMessage()); 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    log("MSG-received facebook SDK exception!! ".$e->getMessage()); 
} 

if($badperms) { 
    //do something like reflow auth 
} 
0

Tôi vừa gặp vấn đề tương tự, tôi không biết cách xử lý hành động hủy (cả trong facebook php api và google oauth2).

Giải pháp dễ dàng hơn nhiều so với dự kiến.

Phản hồi trong trường hợp quyền không được chấp nhận (ở tất cả) đi kèm với ít nhất một thông số/biến: lỗi trong URL.

Trong facebook rằng phản ứng trông giống như:

lỗi = access_denied & error_code = 200 & ERROR_DESCRIPTION = Quyền + lỗi & ERROR_REASON = user_denied

cho google bạn chỉ nhận được

lỗi = access_denied

nhưng nó là đủ.

Tôi chỉ đang kiểm tra xem lỗi có được đặt hay không và nếu được đặt, tôi đang chuyển hướng phản hồi đến trang đăng nhập của tôi.

Tôi hy vọng nó sẽ giúp ai đó vì nó thực sự không được ghi lại trong bước này. Nhân tiện: phiên bản của API facebook: v5 phiên bản của google API oAuth2: 2.0 (tôi nghĩ - google doc thực sự là một mớ hỗn độn khi tìm kiếm phiên bản mới nhất)

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