Omniauth将数据传递给Facebook并让他们在身份验证后返回它

时间:2017-07-05 14:22:32

标签: ruby-on-rails omniauth omniauth-facebook

我有一个omniauth Facebook工作,我想实施年龄验证,以便未成年人不能加入。

我决定在向用户显示注册页面之前询问用户的出生日期。

如果用户提供了有效的出生日期并选择加入Facebook,那么我想将该出生日期发送到Facebook,并在认证完成后将其与用户一起返回,以便我可以使用它在创建帐户时。

这有意义吗?是否有可能告诉omniauth我之前收集了很多属性,我需要你把它们发回给我,所以我不会丢失它们并且必须要求用户提供两次出生日期?

如果不这样做,除了再次询问出生日期我还能做些什么?

1 个答案:

答案 0 :(得分:1)

你可以要求facebook通过"生日"对于用户而言,您需要通过请求" user_birthday"来确定您的oauth流程中的范围。范围。然后,您需要发出新请求以获取该请求。

所以在oauth流之后你应该有一个令牌,用于user_birthday。

使用该令牌,您可以构建以下URI:

https://graph.facebook.com/v2.4/me?fields=birthday&access_token=THE_TOKEN_RECEIVED_THROUGH_OMNIAUTH

使用Net :: HTTP获取该资源(或任何您想要的库)。如果您的访问令牌授予访问生日范围的权限,您将获得一个您需要解析的json响应,以便您可以读取该值。

您还需要处理用户可能拒绝的情况,允许您获得生日范围的许可(假设他们认为您可以使用它来验证他们的年龄 - 因为您之前已经提出要求#39;很容易被扣除......并且他们拒绝你通过Facebook访问它,因为他们不是你所要求的年龄),要么停止注册,继续,或任何你认为合适的。另请记住,用户可能没有在Facebook上设置生日。

如果您只想跟踪用户首先输入的生日,只需将其存储在会话[:user_birthday]或其他内容中。