如何验证用户是否超过18岁

时间:2012-01-19 15:30:11

标签: php facebook facebook-graph-api

我正在构建一个不应该被18岁以下的人看到的Facebook应用程序,因为它大量使用了Graph API我想知道是否可以使用它自动找到年龄。

查看文档,我可以看到应该可以使用签名请求查找用户年龄范围。但是我还没有找到任何实现这个的实际例子。

理想情况下,我希望能够得到一个值为TRUE或FALSE的变量。如果真的超过18岁,则表示用户未成年人是假的。

我打算要求生日许可并使用它来计算年龄但是我的许多朋友似乎没有显示他们的出生年份,所以我假设很多其他人也这样做,我猜如果出生年份是隐藏的将无法访问Graph API。

有人可以帮我吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

您可以通过编程方式限制整个应用,以便应用及其所有内容仅对符合您限制条件的用户可见,其中包含以下API: https://developers.facebook.com/docs/reference/api/application/#restrictions

这里有一个如何做到这一点的例子: https://developers.facebook.com/blog/post/574/

如果您的应用程序以页面标签或画布(即apps.facebook.com/something)的形式运行,那么发送到您应用的signed_request会包含大致的年龄范围

答案 1 :(得分:0)

每个用户必须指明他们的出生日期才能注册Facebook(因为需要dob字段)。因此,即使用户不喜欢在个人资料中显示年龄信息,也可以在用户获得用户许可后计算他们的年龄,即可访问用户的出生日期。

答案 2 :(得分:0)

我个人更喜欢signed_request - 非常简单,公开且不需要令牌:

https://developers.facebook.com/docs/reference/login/signed-request/

 <?php
$min_age = 0;

if ($_REQUEST) {
  $signed_request = $_REQUEST['signed_request'];
  $parsed = parse_signed_request($signed_request);
  $min_age = (integer)$parsed['user']['age']['min'];


} else {
  $min_age = -1;
}



echo $min_age;


if ($min_age >= 18 ) {

}
else {

}


function parse_signed_request($signed_request) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  return $data;
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}

?>