GabeLafontant
GabeLafontant

Reputation: 63

How to get Facebook user's email using the Koala gem

I'm trying to use FB Open Graph to let my app update a user's attribute. I have Koala installed and using facebook-omniauth for my authentication. Simply I would like query my database looking for a user that matches his fb id and if that user does not exist then I would like to update the user model's attributes with data from the facebook API. Also I'm using mongoid as oppose to active record for my database.

In my user model I have this method.

def facebook @facebook ||= Koala::Facebook::API.new(oauth_token) end

Within my controller I have these lines of code within one of my methods.

@user = User.where(facebook_uid: params[:auth_id])

if @user.empty?
      User.create(
       first_name: User.facebook.get_object("name"),
       last_name: User.facebook.get_object("email"),
       facebook_uid: params[:auth_id],
       facebook_oauth_token: params[:auth_token])
    else
      User.update_attributes(
        facebook_oauth_token: params[:auth_token]
    end

User.facebook.get_object("email") does not return me a user's email when I play around in my console. Does anybody have any idea how to do so?

Thanks!

Upvotes: 3

Views: 4026

Answers (2)

Faruuq
Faruuq

Reputation: 117

This should work:

graph = Koala::Facebook::API.new(oauth_access_token)
profile = graph.get_object('me', fields:'email')

Now profile['email'] will get you the email of the user.

Upvotes: 5

Daniel Cukier
Daniel Cukier

Reputation: 11942

Try this:

  facebook = Koala::Facebook::API.new(oauth_token)
  public_attributes = facebook.get_object("me")

if public_attributes does not return email, this means that the user has not authorized the email for your App. check that you add "email" scope to the OAuth authorization process. If you use devise, this is the config:

  config.omniauth :facebook,  "facebook_app_key",  "facebook_app_secret", {scope: "email"}

Upvotes: -3

Related Questions