Открыть диалог авторизации в Facebook php SDK - PullRequest
1 голос
/ 24 марта 2012

Я являюсь интеграцией Facebook Connect на моем сайте, используя php SDK .. Все работает нормально, за исключением того, что я хочу, чтобы вместо перенаправления на Facebook для аутентификации я хотел открыть диалог OAuth. В настоящее время я использую следующий URL для аутентификации. . Перенаправляет на фейсбук, но не открывает OAuth Dailog ..

https://www.facebook.com/dialog/oauth?client_id=XXXXXXXXXXX&redirect_uri=http%3A%2F%2Fwww.setsail2nz.com.au%2Fmicrosite%2Ffbalbums.php%3Fpid%3D1&state=ad89eddd7f71e7337785f604710c97e8&scope=user_photos%2Cpublish_stream%2Cmanage_friendlists%2Cemail&display=popup

Есть идеи?

EDIT: Я знаю, как сделать это с Facebook JS SDK .. Но есть ли способ сделать это с помощью php?

Редактировать 2: Хорошо, теперь я использую JS SDK, но диалоговое окно по-прежнему не открывается .. Вот мой код

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
     appId      : 'XXXXXXXXXX', // App ID
     status     : true, // check login status
     cookie     : true, // enable cookies to allow the server to access the session
     xfbml      : true,  // parse XFBML
     oauth   : true // enables OAuth 2.0
    });
  };

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));

  function fblogin()
  {
    FB.login(function(response)
    {
        alert(response);

    },{perms: "user_photos,publish_stream,manage_friendlists,email"});
  }
</script>

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Используйте Javascript SDK https://developers.facebook.com/docs/reference/javascript/

И FB.login, передавая необходимые разрешения

0 голосов
/ 22 июля 2013

Чтобы ответить на ваш вопрос об обнаружении ответа диалога с помощью PHP SDK:

Проблема заключается в том, что getloginURL принимает только один параметр URL, который он использует в случае успеха или ошибки.Мне нужно было определить, нажал ли пользователь кнопку «ОК» или «Отмена» в диалоговом окне разрешений, чтобы я мог либо перенаправить на страницу диалогового окна предварительных разрешений, либо показать правильный зарегистрированный контент.

Все, что я делал, это проверял,'error_reason' существовал в параметрах url, и если ошибка была 'user_denied', и предпринял соответствующее действие.Возможно, есть лучший способ, но у меня это сработало.

<?php
    //Facebook Authentication
    $user = $facebook->getUser();

    //Get Login URL
    $loginUrl = $facebook->getLoginUrl(); 

    //User is logged in
    if ($user) {
      try {
        // Proceed knowing you have a logged in user who's authenticated.
        $user_profile = $facebook->api('/me');
      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }
    }

    //User is not logged in
    if (!$user) {
        //Check if error_reason was generated and if the user denied login
        if (isset($_REQUEST['error_reason']) && ($_REQUEST['error_reason']=='user_denied')) {
            //user cancelled permissions dialog thus not logged in to app, redirect elsewhere
            echo "<script type='text/javascript'>top.location.href = 'YOUR REDIRECT URL';</script>";
            exit;
        } else {
            //user not logged in so initiate permissions dialog
            echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
            exit;
        }
    }

    //get user basic description
    $userInfo = $facebook->api("/$user");
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...