2015-10-12 15 views
7

'dan first_name ve last_name alanlarını alıyorum. Şimdi uygulamamda omniauth özelliğini uyguluyorum. Her şey gayet iyi çalışıyor, ancak facebooktan ilk ve soyadını alamıyorum. İşte benim model kodum.facebook omniauth

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 

o artık varsayılan için kimlik doğrulaması kullanıyorum ve orada Facebook'a gelen ilk ve son isim için gerekli herhangi bir ek izin properly.Is çalışıyor gibi ben zaten vasiyetle düzgün kuvvetli parametreler kurulum var?

cevap

23

Çevresinden biraz geçtikten sonra çözümü buldum. Şimdi bence ihtiyaç duyduğumuz alanları açıkça almalıyız. Benim için düzeltme sadece first_name ve last_name'un facebook'a eklenmesidir.

initializers'umda first_name ve last_name eklerini info fields'a ekledim.

info_fields: 'email, first_name, last_name' 

Güncelleme

Benim tam yapılandırma dosyası bu şimdi

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

İlginç! Hangi mücevher kullanıyorsun? Https://rubygems.org/gems/omniauth-facebook/versions/2.0.1 kullanıyoruz ve bunu yapmak zorunda değiliz. – seddy

+0

Neden olduğunu bilmiyorum ...taş kullanıyorum "omniauth-facebook" – Abhilash

+0

Weird, yine de çözdüğüne sevindim :). Bu bilgiyi 'info_fields' ile nerede buldunuz? – seddy

1

Facebook docs, first_name ve last_name alanlarını denetlemeden, izinlerinizin iyi olması için ortak profilin bir parçasıdır.

Bunun işe yarayıp yaramayacağına dair bir fikriniz yok (aslında, umarız ki umarım olmaz), ancak uygulamada, şu anda yöntemler yerine Hash accessors kullanıyoruz. Yani:

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

Verilen senin email alanların doğru ayarlanmış alıyorsanız vb eserler olduğunu çalışıyorum eğer çok şaşırırım, ama denemeye değer olabilir.

Bu, herhangi bir doğrulama veya before_create geri aramalar var, bir şekilde karışıyor olabilirsiniz?

+0

Hayır onun lutfen çalışmıyor gibi görünecektir. Adını ve adının yerine kullanıcı adını denedim. Ad ve soyadı doğrulamalarım vardı ama bunu ominiauth işini yapmak için kaldırdım. Bilgi değişti mi, bir şey mi değişti mi? – Abhilash

İlgili konular