get first_name and last_name fields from facebook omniauth

与世无争的帅哥 提交于 2019-12-13 11:46:45

问题


I am now implementing omniauth feature into my app. Everything works fine except that i cant get the first and last name from the facebook. Here is my model code.

    def self.from_omniauth(auth)
    user = User.where(email: auth.info.email).first
    if user
      return user
    else
      where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
        user.provider = auth.provider
        user.uid = auth.uid
        user.first_name = auth.info.first_name
        user.last_name = auth.info.last_name
        user.email = auth.info.email
        user.image = auth.info.image
        user.password = Devise.friendly_token[0,20]
      end
    end

I already have the strong parameters setup properly for devise as am using that now for default authentication and is working properly.Is there any additional permissions necessary for first and last name from facebook?


回答1:


After some fiddling around i found the solution. Now i think we have to explicitly require the fields we require. For me the fix is just to add first_name and last_name to facebook.

In my initializers i added first_name and last_name to info fields.

info_fields: 'email, first_name, last_name'

Update

My full config file will look like this now

   config.omniauth :facebook, ENV["FACEBOOK_APP_ID"], ENV["FACEBOOK_SECRET"], scope: 'email', info_fields: 'email, first_name, last_name'



回答2:


From checking the Facebook docs, the first_name and last_name fields are both part of the public profile so your permissions should be fine.

No idea if this would work (in fact, I would kind of hope it doesn't), but in the implementation we've got working in production at the moment we're using Hash accessors instead of methods. So:

new(
  first_name: oauth_data["info"]["first_name"],                  
  last_name:  oauth_data["info"]["last_name"],     
  ...

Given your email etc fields are getting set correctly, I'd be surprised if trying that works, but it might be worth a shot.

Failing that, have you got any validations or before_create callbacks which could be interfering somehow?



来源:https://stackoverflow.com/questions/33090322/get-first-name-and-last-name-fields-from-facebook-omniauth

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!