Хэш-документация обратного вызова для входа в Facebook - PullRequest
3 голосов
/ 02 марта 2011

Я использую Omniauth с Devise для аутентификации пользователей через Facebook для веб-приложения. Я пишу с использованием Rails 3.0.4

Я смоделировал его после Railscasts Райана Бейтса:

http://railscasts.com/episodes/235-omniauth-part-1
http://railscasts.com/episodes/236-omniauth-part-2

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

request.env["omniauth.auth"]  

{"user_info"=>  
  {"name"=>"Eric Hu",  
   "urls"=>  
    {"Facebook"=>"http://www.facebook.com/...", "Website"=>nil},  
   "nickname"=>"...",  
   "last_name"=>"Hu",  
   "first_name"=>"Eric"},  
 "uid"=>"...",  
 "credentials"=>  
  {"token"=> "..."},  
 "extra"=>  
  {"user_hash"=>  
    {"name"=>"Eric Hu",  
     "timezone"=>-8,  
     "gender"=>"male",  
     "id"=>"...",  
     "last_name"=>"Hu",  
     "updated_time"=>"2011-02-21T17:46:19+0000",  
     "verified"=>true,  
     "locale"=>"en_US",  
     "link"=>"http://www.facebook.com/...",  
     "email"=>"...",  
     "first_name"=>"Eric"}},  
 "provider"=>"facebook"}  

(replaced some fields with "..." for my own privacy)

Сейчас я использую это поле, чтобы получить адрес электронной почты пользователя

 request.env["omniauth.auth"]["user_info"]["extra"]["email"]

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

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

1 Ответ

3 голосов
/ 03 марта 2011

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

Как только вы знаете, какие разрешения вы хотите, вы можете обновить конфигурацию вашего devise (config / initializers / devise.rb).) так что devise запрашивает необходимые вам разрешения:

config.omniauth :facebook, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET, {:scope => 'offline_access,email,user_birthday'}
...