2017-01-05 5 views
0

Je suis tryig pour obtenir l'adresse de l'utilisateur de facebook avec Omniauth, mais n'a pas fonctionné. J'ai ajouté leur adresse sur le rappel de mise à jour après la connexion.Rails Facebook Omniauth obtenir l'adresse

Si j'ai supprimé leur adresse de omniauth, l'application n'a pas mis à jour leur adresse.

Quelqu'un a une idée de comment obtenir son adresse et pourquoi l'application n'a pas modifié et mis à jour son adresse après la connexion?

remercient

def omniauth_callback 
    auth_hash = request.env['omniauth.auth'] 



    user = User.find_by_uid(auth_hash[:uid]) 
    if user.nil? && auth_hash[:info][:email] 
     user = User.find_by_email(auth_hash[:info][:email]) 
    end 

    if user.nil? 
     email_domain = '' 
     email_domain = '@facebook.com' if auth_hash[:provider] == 'facebook' 
     user = User.new(email: auth_hash[:info][:email] || auth_hash[:info][:nickname] + email_domain, name: auth_hash[:info][:first_name] || '', surname: auth_hash[:info][:last_name] || '', gender: 'I') 

     user.password_digest = '' 
     user.save!(validate: false) 
    end 

    user.update_attribute(:login_at, Time.zone.now) 
    user.update_attribute(:address) 
    user.update_attribute(:neighborhood) 
    user.update_attribute(:postal_code) 
    user.update_attribute(:ip_address, request.remote_ip) 
    user.update_attribute(:provider, auth_hash[:provider]) 
    user.update_attribute(:uid, auth_hash[:uid]) 
    user.update_attribute(:oauth_token, auth_hash[:credentials][:token]) 
    user.update_attribute(:oauth_expires_at, Time.at(auth_hash[:credentials][:expires_at])) 

    cookies[:auth_token] = { value: user.oauth_token, expires: user.oauth_expires_at} 
    redirect_to root_url 
    end 
+0

Possible copie de [Ruby on Rails Omniauth facebook ne renvoie pas d'email] (http://stackoverflow.com/questions/31954540/ruby-on-rails-omniauth-facebook-doesnt-return-email) – OneNeptune

+0

@OneNeptune , non. parce que ce n'est pas l'adresse – jjplack

+0

Le problème est-il que Facebook ne fournit pas l'e-mail ou que votre code ne sauvegarde pas l'e-mail fourni? – mysmallidea

Répondre

0

Une raison pour laquelle votre code ne fonctionnera pas parce que ce

user.update_attribute(:address) 

ne fait rien - sauf soulever une erreur. You have to pass a value into update_attribute as well as specify the field.

Aussi, comme le fait remarquer @mysmallidea, vous feriez mieux de use update car cela vous permettra de mettre à jour plusieurs champs dans une action de base de données.

S'il est présent, les données d'adresse seront comprises dans auth_hash. Donc, je suggère que vous d'abord travailler sur la structure de ce hachage. Dans votre environnement de développement, ajoutez ce qui suit:

Rails.logger.info auth_hash.inspect 

la sortie qui auth_hash courant logs/development.log. Utilisez cela pour déterminer où se trouvent les données d'adresse dans le hachage. Vous serez alors en mesure de faire quelque chose comme:

user.update address: auth_hash[:info][:address] 

Cependant, vous pouvez constater que l'adresse ne figure pas dans les données renvoyées par le système OAuth facebook. Dans ce cas, vous devrez retourner à documentation pour voir si c'est possible.