Определить, является ли пользователь тестовым - PullRequest
1 голос
/ 23 сентября 2011

Тестовые пользователи Facebook (созданные для приложения) в некоторых отношениях работают не так, как обычные пользователи. То есть. им не нравятся фан-страницы, поэтому вы не можете проверить, правильно ли настроен слушатель «create.edge».

Есть ли способ определить, является ли пользователь, прошедший проверку подлинности в приложении, тестовым пользователем? Было бы полезно реализовать поддельные версии диалогов, которые тестовый пользователь не может использовать (т. Е. Нравится фан-страница).

Мое исследование:

  • Я проверил signed_request, переданный приложению, и для тестовых пользователей он выглядит так же, как и для обычных пользователей.
  • Я проверил graph.facebook.com/[test id пользователя], и он также выглядит нормально.

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Вы не можете проверить, является ли пользователь тестовым пользователем, основываясь на его данных API Graph.Точно так же вы не можете проверить, является ли пользователь лайком определенной страницы.Однако вы можете проверить свой page_id по списку понравившихся вам страниц.Таким образом, чтобы определить, является ли данный user_id обычным или тестовым пользователем, вы должны сравнить его со списком тестовых пользователей приложения:

https://graph.facebook.com/APP_ID/accounts/test-users?access_token=APP_ID|APP_SECRET

Таким образом, поток будет выглядеть следующим образом:

  1. Аутентификация пользователя
  2. Получить его ./likes список
  3. Найти свой page_id и успешно завершить работу
  4. Получить свое приложение ./accounts/test-users список
  5. Найти данное user_id и успешно завершиться
  6. Выход с ошибкой - требуется, чтобы пользователь понравился вашей страницей.

Это один дополнительный вызов, но вы можете безопасно кешироватьрезультаты для повышения производительности, поскольку тестовые пользователи не могут быть преобразованы в обычных пользователей.Я бы посоветовал кешировать проверку «лайков» на некоторое время, но YMMV.

0 голосов
/ 02 июля 2015

Если пользователь Facebook тестирует, вы можете изменить имя и пароль, иначе верните код ошибки (# 200) У вас недостаточно прав для выполнения этого действия

** Мое решение:**

public function isTestUser($facebook_uid){
    FacebookSession::setDefaultApplication(config_item('APP_ID'), config_item('APP_SECRET'));

    $session = FacebookSession::newAppSession();

    try {
        $session->validate();
    } catch (FacebookRequestException $ex) {
        // Session not valid, Graph API returned an exception with the reason.
        return FALSE;
    } catch (\Exception $ex) {
        // Graph API returned info, but it may mismatch the current app or have expired.
        return FALSE;
    }

    $request = new FacebookRequest(
        $session,
        'POST',
        '/'.facebook_uid,
        array(
            'password' => 'password',
            'name' => 'Test Username'
        )
    );

    try {
        $response = $request->execute();
    } catch (FacebookRequestException $ex) {
        // (#200) You do not have sufficient permissions to perform this action
        // (#100) Invalid password
        // (#100) Invalid name
        return ($ex->getCode() == 100) ? TRUE : FALSE;

    } catch (\Exception $ex) {
        return FALSE;
    }

    /*
   object(Facebook\GraphObject)#1714 (1) {
     ["backingData":protected]=>
     array(1) {
       ["success"]=>
       bool(true)
     }
   }
   */

    $graphObject = $response->getGraphObject();

    return ($graphObject) ? TRUE : FALSE;
}
...