2012-06-07 2 views
0

У меня проблема с php Facebook sdk. Я прочитал много сообщений, рассказывающих о тех же проблемах (токен доступа недействителен, цикл переадресации и т. Д.), Но никто не мог помочь.Facebook OpenGraph с Yii Framework - Ошибка аутентификации

Вкратце, как разработан мой проект:

Это приложение Facebook, который предназначен для работы только с пользователем, зарегистрированным в Facebook. Используя Yii Framework, я создал фильтр, который вызывается каждый раз, когда страница загружается, чтобы убедиться, что контент виден только пользователем, зарегистрированным в Facebook. Он должен вести себя точно так же, как приложение BranchOut на Facebook.

Моя проблема, и как ее воспроизвести:

  • прологиниться в моем приложении, используя типичный процесс входа в систему с Facebook (OAuth, маркер доступа)
  • Я отключала вручную на странице Facebook, а затем попробуйте сделать новое действие в моем приложении
  • Фильтр проверяет, зарегистрирован ли я на Facebook, а потому, что я не являюсь, он перенаправляет меня на страницу входа в систему Facebook.
  • После того, как я снова вхожу в Facebook, я получаю типичный бесконечный цикл между Facebook и фильтром моего приложения.

Вот код моего фильтра:

$fb_logged = false; 
try 
{ 
    $user = Yii::app()->facebook->getUser(); 
    $me = Yii::app()->facebook->api('/me'); 
    $fb_id = $me['id']; 
    $fb_logged = true; 
} 
catch (Exception $e) 
{ 
    $fb_logged = false; 
} 

if($fb_logged) 
{ 
    print_r($fb_id. ' has logged'); 
    /* Check if user exists on MyApp 
    ... */ 
} 
// If user NOT logged on FB, send him to the FB login page 
else 
{ 
    $loginUrl = Yii::app()->facebook->getLoginUrl(array(
       'redirect_uri' => Yii::app()->getRequest()->getUrl() // I have tried many things here. 
     )); 
    echo("<script> top.location.href='" . $loginUrl . "'</script>"); 
    Yii::app()->end(); 
} 

Что именно происходит, что после входа на FB, Фильтр вызывается снова, так как запрос на тот же URL сделан. И в этот момент вызов api ('/ me') генерирует исключение, потому что он не может найти действительный токен доступа и начинает цикл на нем.

Я могу добавить, что моя конфигурация хороша (или кажется), я проверил все мои URL-адреса, имя домена в соответствии с настройками приложения Facebook. Я также пробовал много вещей, таких как перенаправление на новый конкретный URL-адрес, но в любом случае мне нужно также использовать фильтр, потому что я хочу убедиться, что это все тот же пользователь (или действовать соответственно, если пользователь изменился).

Единственное, что работает, это перенаправить пользователя на страницу, у которой нет фильтра (никакого вызова api («/ me») не производится). И затем, щелкнув вручную новую ссылку в приложении, и там найден токен доступа. И это не то поведение, которое я хочу.

Я действительно надеюсь, что кто-то может мне помочь!

Заранее спасибо.

+0

Вы нашли, что проблема до сих пор. Я испытываю ту же проблему. –

ответ

1

После вашей новой попытки входа вы должны получить новый код в URL-адресе, который перенаправляется. Поэтому найдите этот параметр кода, и если он есть, замените его на новый токен доступа.

+0

Знаете ли вы способ сделать это с помощью SDK?Обычно метод getUser() должен делать все это, но никак не с помощью getUser(), я получаю идентификатор FB, даже если я вышел из системы ... Я также пытался очистить сеанс/cookie, чтобы сделать вызов getUser(), чтобы убедиться, что будет запрошен новый access_token, но теперь! Вызов api ('/ me') сразу после того, как все еще говорит мне, что активного токена нет. – aramaki

0

Посмотрите также на расширение yiiauth. Он был опубликован только сегодня, и с ним вы можете войти в систему с 29 различными провайдерами: Facebook, OpenID, Google, Twitter, Yahoo и т. Д.

Он использует библиотеку HybridAuth и AFAICT, что делает аутентификацию очень простой.

+0

Спасибо Ors. То, что я хочу сделать, - это неявное аутентификация. Я не хочу, чтобы люди нажимали кнопку входа в систему или что-то в этом роде. Я просто хочу, чтобы они автоматически вошли в мое приложение, если они вошли в FB. Я не думаю, что это возможно с yiiauth. – aramaki

Смежные вопросы