【问题标题】:Detect if user is test user检测用户是否为测试用户
【发布时间】:2011-11-23 11:45:32
【问题描述】:

Facebook 测试用户(为应用创建)在某些方面与普通用户不同。 IE。他们不喜欢粉丝页面,因此您无法测试“create.edge”侦听器是否设置正确。

有没有办法检测通过应用程序验证的用户是否是测试用户?实现测试用户无法使用的假对话版本(即喜欢粉丝专页)会很有用。

我的研究:

  • 我检查了 signed_request 传递给应用程序,测试用户和普通用户看起来一样。
  • 我检查了 graph.facebook.com/[test user id],它看起来也很正常。

【问题讨论】:

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


    【解决方案1】:

    您无法根据用户的 Graph 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. 退出失败 -- 要求用户喜欢您的页面。

    这是一个额外的调用,但您可以安全地缓存结果以获得性能提升,因为测试用户无法转换为普通用户。我建议也将“喜欢”检查缓存一段时间,但 YMMV。

    【讨论】:

    • 您实际上可以检查用户是否是粉丝:developers.facebook.com/docs/reference/rest/pages.isFan。而且它比获取他的喜欢更可靠(我前段时间测试过,FB有时会为用户返回空页面列表)。您测试用户是否是测试用户的想法很棒。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 2013-04-16
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多