Omniauth передает данные в Facebook и возвращает их после аутентификации.

У меня работает omniauth Facebook, и я хотел бы реализовать проверку возраста, чтобы несовершеннолетние не могли присоединиться.

Я решил спросить у пользователей дату их рождения, прежде чем я покажу им страницу регистрации.

Если пользователь указывает действительную дату рождения и решает присоединиться к Facebook, я хотел бы отправить эту дату рождения в Facebook и вернуть ее вместе с пользователем после завершения аутентификации, чтобы я мог использовать ее при создании их счет.

Это имеет смысл? Можно ли сказать omniauth, что у меня есть куча атрибутов, собранных ранее, и мне нужно, чтобы вы отправили их мне обратно, чтобы я не потерял их и не должен дважды спрашивать у пользователя дату его рождения?

В противном случае, что я могу сделать, кроме как снова попросить дату рождения?


person stephenmurdoch    schedule 05.07.2017    source источник


Ответы (1)


Вы можете попросить facebook передать «день рождения» пользователя, но для этого вам нужно будет запросить эту область в вашем потоке oauth, запросив область «user_birthday». Затем вам нужно будет создать новый запрос, чтобы получить это.

Итак, после потока oauth у вас должен быть токен с областью действия user_birthday.

С помощью этого токена вы можете создать следующий URI:

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

И используйте Net::HTTP для получения этого ресурса (или любой другой библиотеки, которую вы хотите). Если ваш токен доступа предоставляет доступ к области дня рождения, вы получите ответ json, который вам нужно будет проанализировать, чтобы прочитать значение.

Вам также нужно будет позаботиться о ситуации, в которой пользователь может отказать в предоставлении вам разрешения на область действия дня рождения (скажем, они думали, что вы можете использовать это для проверки их возраста - поскольку вы запросили это ранее, это легко сделать вывод ... и они отказывают вам в доступе к нему через Facebook, потому что они не достигли требуемого вам возраста), либо останавливая регистрацию, либо продолжая, либо любым другим способом, который вы сочтете уместным. Также помните, что у пользователя может не быть установлен день рождения на facebook.

Если вы просто хотите отслеживать день рождения пользователя, в первую очередь, просто сохраните его в session[:user_birthday] или что-то в этом роде.

person m3characters    schedule 05.07.2017