Ruby on rails Omniauth将数据传递到Facebook,并让他们在验证后返回数据

Ruby on rails Omniauth将数据传递到Facebook,并让他们在验证后返回数据,ruby-on-rails,omniauth,omniauth-facebook,Ruby On Rails,Omniauth,Omniauth Facebook,我已经让omniauth Facebook工作,我想实施年龄验证,这样未成年人就不能加入 我决定在向用户显示注册页面之前,先询问他们的出生日期 如果用户提供了有效的出生日期并选择加入Facebook,那么我想将该出生日期发送到Facebook,并在身份验证完成后与用户一起返回,以便我在创建他们的帐户时使用它 这有意义吗?是否可以告诉omniauth我之前收集了一堆属性,我需要您将它们发送回我,这样我就不会丢失它们,并且必须向用户询问两次它们的出生日期 否则,除了再次询问出生日期,我还能做什么?您

我已经让omniauth Facebook工作,我想实施年龄验证,这样未成年人就不能加入

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

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

这有意义吗?是否可以告诉omniauth我之前收集了一堆属性,我需要您将它们发送回我,这样我就不会丢失它们,并且必须向用户询问两次它们的出生日期


否则,除了再次询问出生日期,我还能做什么?

您可以要求facebook通过用户的生日,但为此,您需要在oauth流中请求用户生日范围。然后你需要发出一个新的请求来获取它

因此,在oauth流之后,您应该有一个令牌,作用域为user_birth

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

https://graph.facebook.com/v2.4/me?fields=birthday&access_token=THE_TOKEN_RECEIVED_THROUGH_OMNIAUTH
并使用Net::HTTP获取该资源或任何您想要的库。如果您的访问令牌授予您对生日作用域的访问权,那么您将得到一个json响应,您需要对其进行解析,以便读取该值

你还需要注意这样一种情况,即用户可能拒绝向你授予生日范围的权限,说他们认为你可以使用该权限来验证他们的年龄-因为你之前要求过,所以很容易进行扣减。。。他们拒绝你通过facebook访问它,因为他们没有达到你要求的年龄,要么停止注册,要么继续进行,或者你认为合适的任何事情。还要记住,用户可能没有在facebook上设置生日

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