检测用户是否为测试用户

时间:2011-09-23 08:38:55

标签: facebook facebook-graph-api facebook-javascript-sdk

Facebook测试用户(为应用程序创建)在某些方面与普通用户的工作方式不同。 IE浏览器。他们不喜欢粉丝,所以你无法测试“create.edge”监听器是否设置正确。

有没有办法检测用户对应用程序进行身份验证是否为测试用户?实现虚假版本的对话框是有用的,测试用户不能使用(即喜欢粉丝页面)。

我的研究:

  • 我已检查传递给应用的signed_request,对于测试用户而言,它与普通用户相同。
  • 我查看了graph.facebook.com/ [test user id],看起来也很正常。

2 个答案:

答案 0 :(得分:1)

您无法根据其图谱API详细信息检查用户是否为测试用户。同样,您无法检查用户是否喜欢特定页面。但是,您可以针对用户喜欢的页面列表检查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. 获取您的APP ./accounts/test-users列表
  5. 查找给定的user_id并退出成功
  6. 退出失败 - 要求用户喜欢您的页面。
  7. 这是一个额外的调用,但您可以安全地缓存结果以提高性能,因为测试用户无法转换为普通用户。我建议缓存“喜欢”检查一段时间,但YMMV。

答案 1 :(得分:0)

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;
}