Omniauth 将数据传递给 Facebook 并在身份验证后让它们 return
Omniauth passing data to Facebook and having them return it after authentication
我正在使用 omniauth Facebook,我想实施年龄验证,这样未成年人就无法加入。
我决定在向用户显示注册页面之前询问他们的出生日期。
如果用户提供有效的出生日期并选择加入 Facebook,那么我想将该出生日期发送到 Facebook,并在身份验证完成后与用户一起返回,这样我可以在创建帐户时使用它。
这有意义吗?是否可以告诉 omniauth 我之前收集了一堆属性,我需要你将它们发回给我,这样我就不会丢失它们,并且不得不两次询问用户他们的出生日期?
不行的话,除了再问一遍出生年月日还能怎么办?
您可以要求 Facebook 传递用户的 "birthday",但为此您需要通过请求 "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 获取该资源(或您想要的任何库)。如果您的访问令牌授予对 birthday 范围的访问权限,您将收到一个 json 响应,您需要对其进行解析以便读取该值。
您还需要注意用户可能拒绝授予您生日范围权限的情况(假设他们认为您可以使用它来验证他们的年龄 - 因为您之前要求过它很容易做出推论……他们拒绝您通过 Facebook 访问它,因为他们不是您要求的年龄),通过停止注册、继续或您认为合适的任何方式。还要记住,用户可能没有在 facebook 上设置生日。
如果您只想跟踪用户首先输入的生日,只需将其存储在会话[:user_birthday] 或其他内容中即可。
我正在使用 omniauth Facebook,我想实施年龄验证,这样未成年人就无法加入。
我决定在向用户显示注册页面之前询问他们的出生日期。
如果用户提供有效的出生日期并选择加入 Facebook,那么我想将该出生日期发送到 Facebook,并在身份验证完成后与用户一起返回,这样我可以在创建帐户时使用它。
这有意义吗?是否可以告诉 omniauth 我之前收集了一堆属性,我需要你将它们发回给我,这样我就不会丢失它们,并且不得不两次询问用户他们的出生日期?
不行的话,除了再问一遍出生年月日还能怎么办?
您可以要求 Facebook 传递用户的 "birthday",但为此您需要通过请求 "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 获取该资源(或您想要的任何库)。如果您的访问令牌授予对 birthday 范围的访问权限,您将收到一个 json 响应,您需要对其进行解析以便读取该值。
您还需要注意用户可能拒绝授予您生日范围权限的情况(假设他们认为您可以使用它来验证他们的年龄 - 因为您之前要求过它很容易做出推论……他们拒绝您通过 Facebook 访问它,因为他们不是您要求的年龄),通过停止注册、继续或您认为合适的任何方式。还要记住,用户可能没有在 facebook 上设置生日。
如果您只想跟踪用户首先输入的生日,只需将其存储在会话[:user_birthday] 或其他内容中即可。