this is what they say:

https://www.facebook.com/help/224049364288051

facebook documentation for developers is incomplete, so to say, on many
occasions...

mic




2013/10/29 Lisandro Rostagno <rostagnolisan...@gmail.com>

> Thanks for the answer. The problem is that I really need a valid email
> address, because in my site I use that email to send important
> notifications to the user.
> I already tried with "facebook mail", that is, joining the user name with
> "@facebook.com". But it didn't work. When I send an email to a facebook
> mail, I receive an automatic response from Facebook saying that there is a
> permission problem. I understand that @facebook email addresses are only
> for communication between Facebook users :/
>
>
> 2013/10/29 Michele Comitini <michele.comit...@gmail.com>
>
>> create a fake email...
>>
>> something like the following (check for errors I did not test it)
>>
>> if user:
>>   if not user.has_key('email') or user['email'] == '' or user['email'] is
>> None:
>>      user['email'] = user['first_name'] + '.' + user['last_name'] + '.' +
>> user['id'] + '@facebook.email.is.not.valid'
>>
>>
>>
>> 2013/10/29 Lisandro <rostagnolisan...@gmail.com>
>>
>>>  I see, your theory is pretty much accurate (sorry for my english, I
>>> hope that phrase is correct). What I mean is that your theory is the most
>>> addecuate for this case, thought it can't be proved. Actually, there is
>>> another error that says something about access token been already used, but
>>> happens very little.
>>>
>>> My question now is: ¿can I avoid this situation and do something?
>>>
>>> I have this in one of my models:
>>>
>>> if session.login_facebook:
>>>     from globales import FaceBookAccount
>>>     auth.settings.login_form = FaceBookAccount(globals())
>>>
>>>  And this is te dfinition of FaceBookAccount class:
>>>
>>> class FaceBookAccount(OAuthAccount):
>>>     AUTH_URL="https://graph.facebook.com/oauth/authorize";
>>>     TOKEN_URL="https://graph.facebook.com/oauth/access_token";
>>>
>>>     def __init__(self, g):
>>>         OAuthAccount.__init__(self, g, current.FACEBOOK_APP_ID,
>>> current.FACEBOOK_APP_SECRET_KEY, \
>>>           self.AUTH_URL, self.TOKEN_URL, scope='email')
>>>         self.graph = None
>>>
>>>     def get_user(self):
>>>         if not self.accessToken():
>>>             return None
>>>         if not self.graph:
>>>             self.graph = GraphAPI((self.accessToken()))
>>>         user = None
>>>         try:
>>>             user = self.graph.get_object("me")
>>>         except GraphAPIError, e:
>>>             self.session.token = None
>>>             self.graph = None
>>>         if user:
>>>             return dict(first_name='%s %s' %(user['first_name'],
>>> user['last_name']), \
>>>               username=user['id'], registration_id=user['id'],
>>> email=user['email'])
>>>
>>> I would like to, at least, show an error message to the user saying that
>>> something went wrong trying to get his/her email from Facebook, and that
>>> he/she should try again. Can't figure it out how to do it :/
>>>
>>>
>>> El martes, 29 de octubre de 2013 03:48:36 UTC-3, Christian Foster Howes
>>> escribió:
>>>
>>>> the problem is that facebook is not returning an email.
>>>>
>>>> i know, i know, you told facebook that email is required and you can't
>>>> reproduce such a state.  i'm 100% with you, but i see the exact same
>>>> behavior with my users!  i suspect that these are actually returning users
>>>> who granted email access when they first created an account, but then they
>>>> changed their facebook permissions to remove email access and when they
>>>> return to your site and login, facebook lets them (because they have
>>>> before), but does not give you the email address.   i have not confirmed
>>>> this theory, but it's my running theory.
>>>>
>>>> other potential issue is the expiration of the facebook access token.
>>>> those rules changed this spring and i'm not 100% up to date on the rules
>>>> right now.
>>>>
>>>> cfh
>>>>
>>>> On Monday, October 28, 2013 10:57:06 AM UTC-7, Lisandro wrote:
>>>>>
>>>>> I'm having a similar problem with KeyError: 'email'.
>>>>>
>>>>> I have a site in production that uses oauth2 and offers the
>>>>> possibility of register/login using personal facebook account.
>>>>> I created a Facebook app and set permissions to get user's email (so I
>>>>> can create the account on my site). Everything works perfect, lots of 
>>>>> users
>>>>> have registered in my site using their Facebook accounts. Even myself.
>>>>>
>>>>> However, there are some error tickets created with this error of
>>>>> "KeyError:email". First I thought that some users didn't let the
>>>>> application get their emails, but that's not possible. When you try to log
>>>>> in my site using Facebook, facebook tells you that te application will get
>>>>> your email, and you only can accept or decline. If you decline, you're not
>>>>> registered. And if you accept, my site gets your email and creates the
>>>>> account.
>>>>>
>>>>> So, I don't know which could be the problem. This is the traceback of
>>>>> the error:
>>>>>
>>>>>
>>>>> Traceback (most recent call last):
>>>>>   File "/var/www/vendosimple/gluon/**restricted.py", line 212, in 
>>>>> restricted
>>>>>
>>>>>
>>>>>
>>>>>     exec ccode in environment
>>>>>   File 
>>>>> "/var/www/vendosimple/**applications/init/controllers/**default.py", line 
>>>>> 645, in <module>
>>>>>
>>>>>
>>>>>
>>>>>   File "/var/www/vendosimple/gluon/**globals.py", line 194, in <lambda>
>>>>>
>>>>>
>>>>>
>>>>>     self._caller = lambda f: f()
>>>>>
>>>>>
>>>>>
>>>>>   File 
>>>>> "/var/www/vendosimple/**applications/init/controllers/**default.py", line 
>>>>> 380, in user
>>>>>
>>>>>
>>>>>
>>>>>     form = auth()
>>>>>   File "/var/www/vendosimple/gluon/**tools.py", line 1250, in __call__
>>>>>
>>>>>
>>>>>
>>>>>     return getattr(self, args[0])()
>>>>>
>>>>>
>>>>>
>>>>>   File "/var/www/vendosimple/gluon/**tools.py", line 2128, in login
>>>>>
>>>>>
>>>>>
>>>>>     cas_user = cas.get_user()
>>>>>   File "applications/init/modules/**globales.py", line 41, in get_user
>>>>>
>>>>>
>>>>>
>>>>>     username=user['id'], registration_id=user['id'], email=user['email'])
>>>>>
>>>>>
>>>>> KeyError: 'email'
>>>>>
>>>>>
>>>>> Any ideas?
>>>>>
>>>>>
>>>>> El martes, 7 de junio de 2011 01:00:33 UTC-3, Massimo Di Pierro
>>>>> escribió:
>>>>>>
>>>>>> I am not familiar with facebook email.
>>>>>>
>>>>>> If this (username + @facebook) is avlid email, perhaps web should set
>>>>>> that even if username=True
>>>>>>
>>>>>> On Jun 6, 7:15 pm, "Sebastian E. Ovide" <sebastian.ov...@gmail.com>
>>>>>> wrote:
>>>>>> > I do not see major pros and cons... it is a matter of
>>>>>> precerences...
>>>>>> >
>>>>>> > 1) setting username=True in auth.define_tables(), define_tables
>>>>>> will add a
>>>>>> > field on the table (username) and if that field is present,
>>>>>> authentication
>>>>>> > will be done using username. Personally I prefer to use emails
>>>>>> rather than
>>>>>> > usernames, and as I am using BOTH web2py auth and facebook at the
>>>>>> same  time
>>>>>> > for authentication (two different links for different logins), I
>>>>>> didn't want
>>>>>> > to force my application to use usernames.... so I've used the
>>>>>> second option
>>>>>> >
>>>>>> > 2) in this case I'm adding an email created by the facebook
>>>>>> username +
>>>>>> > @facebook and therefore auth will keep using email for
>>>>>> authentication...
>>>>>> >
>>>>>> > no web2py code has been touched, although I'm extending Auth and
>>>>>> > overriding navbar to display a second login link (facebook) and
>>>>>> hide
>>>>>> > change_password when it is logged in via facebook.
>>>>>> >
>>>>>> >             if session.login_method_used is None:
>>>>>> >                 if not 'change_password' in self.settings.actions_*
>>>>>> *disabled:
>>>>>> >                     bar.insert(-1, ' | ')
>>>>>> >                     bar.insert(-1, password)
>>>>>> >
>>>>>> > and in my controller:
>>>>>> >
>>>>>> > def user():
>>>>>> >     if auth.user_id:
>>>>>> >         if request.args[0] == 'logout':
>>>>>> >             session.login_method_used=None
>>>>>> >     else:
>>>>>> >         if request.args[0] == 'login':
>>>>>> >             session.login_method_used=None
>>>>>> >         elif request.args[0] == 'login_fb':
>>>>>> >             session.login_method_used="**facebook"
>>>>>> >             request.args[0]='login'
>>>>>> >
>>>>>> >     if session.login_method_used=="**facebook":
>>>>>> >         auth.settings.login_form=**FaceBookAccount(globals())
>>>>>> >
>>>>>> >     return dict(form=auth())
>>>>>> >
>>>>>> > On Mon, Jun 6, 2011 at 11:16 PM, Massimo Di Pierro <
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> > massimo.dipie...@gmail.com> wrote:
>>>>>> > > if there is agreement on one, please send me a patch.
>>>>>> >
>>>>>> > > On Jun 6, 4:31 pm, "Sebastian E. Ovide" <
>>>>>> sebastian.ov...@gmail.com>
>>>>>> > > wrote:
>>>>>> > > > Hi Mic,
>>>>>> >
>>>>>> > > > thanks for that.
>>>>>> >
>>>>>> > > > actually I've debugged web2py and figure it out for myself.
>>>>>> There are two
>>>>>> > > > easy ways to fix it (I've tried to add them to the book, but my
>>>>>> account
>>>>>> > > > doesn't allow me to edit it)
>>>>>> >
>>>>>> > > > 1) set username=False in auth.define_tables()
>>>>>> > > > 2) add  email = 
>>>>>> > > > user['username']+"@facebook.**com<http://facebook.com>"
>>>>>> in the return of def
>>>>>> > > > get_user
>>>>>> >
>>>>>> > > > On Mon, Jun 6, 2011 at 10:02 PM, Michele Comitini <
>>>>>> >
>>>>>> > > > michele.comit...@gmail.com> wrote:
>>>>>> > > > > Hi Sebastian,
>>>>>> >
>>>>>> > > > > copy from this example:
>>>>>> >
>>>>>> > > > >http://code.google.com/r/**michelecomitini-**
>>>>>> facebookaccess/source/browse<http://code.google.com/r/michelecomitini-facebookaccess/source/browse>.
>>>>>>
>>>>>> > > ..
>>>>>> >
>>>>>> > > > > <
>>>>>> > >http://code.google.com/r/**michelecomitini-**
>>>>>> facebookaccess/source/browse<http://code.google.com/r/michelecomitini-facebookaccess/source/browse>..
>>>>>>
>>>>>> > > .>and
>>>>>> > > > > let me know
>>>>>> >
>>>>>> > > > > mic
>>>>>> >
>>>>>> > > > > 2011/6/6 Sebastian E. Ovide <sebastian.ov...@gmail.com>
>>>>>> >
>>>>>> > > > > Hi All,
>>>>>> >
>>>>>> > > > >> just wondering if the section "OAuth2.0 and Facebook" of the
>>>>>> book is
>>>>>> > > up to
>>>>>> > > > >> date?
>>>>>> >
>>>>>> > > > >> I following it's instructions but I'm getting an "Internal
>>>>>> error"
>>>>>> >
>>>>>> > > > >> to reproduce
>>>>>> >
>>>>>> > > > >> 1) get last web2py 1.196.3
>>>>>> > > > >> 2) follow the instructions from the book
>>>>>> > > > >> 2.a) get facebook and place it in modules
>>>>>> > > > >> 2.b) copy the code from the book
>>>>>> > > > >> 2.c) replace "from facebook import GraphAPI" with "facebook
>>>>>> =
>>>>>> > > > >> local_import('facebook')"
>>>>>> > > > >> 2.d) replace facebook. to GraphAPIError and GraphAPI
>>>>>> > > > >> 2.e) replace YOUR_CLIENT_ID and YOUR_CLIENT_SECRET with real
>>>>>> data
>>>>>> > > > >> 3) set your app URL tohttp://localhost:8000/**welcome/
>>>>>> >
>>>>>> > > > >> Is something missing ?
>>>>>> >
>>>>>> > > > >> When I click login, it redirect me to facebook, where I can
>>>>>> login, and
>>>>>> > > > >> then it redirects me tohttp://localhost:8000/**welcome/
>>>>>> >
>>>>>> > > > >> At that point I get an error:
>>>>>> >
>>>>>> > > > >>  TRACEBACK
>>>>>> >
>>>>>> > > > >> 1.
>>>>>> > > > >> 2.
>>>>>> > > > >> 3.
>>>>>> > > > >> 4.
>>>>>> > > > >> 5.
>>>>>> > > > >> 6.
>>>>>> > > > >> 7.
>>>>>> > > > >> 8.
>>>>>> > > > >> 9.
>>>>>> > > > >> 10.
>>>>>> > > > >> 11.
>>>>>> > > > >> 12.
>>>>>> > > > >> 13.
>>>>>> > > > >> 14.
>>>>>> > > > >> 15.
>>>>>> > > > >> 16.
>>>>>> >
>>>>>> > > > >> Traceback (most recent call last):
>>>>>> >
>>>>>> > > > >>   File "/home/sebas/Downloads/web2py/**gluon/restricted.py",
>>>>>> line 184,
>>>>>> > > in restricted
>>>>>> >
>>>>>> > > > >>     exec ccode in environment
>>>>>> >
>>>>>> > > > >>   File
>>>>>> > > "/home/sebas/Downloads/web2py/**applications/welcome/**controllers/default.py"
>>>>>> <
>>>>>> > >http://localhost:8000/admin/**default/edit/welcome/**
>>>>>> controllers/default.py<http://localhost:8000/admin/default/edit/welcome/controllers/default.py>>,
>>>>>>
>>>>>> > > line 71, in <module>
>>>>>> >
>>>>>> > > > >>   File "/home/sebas/Downloads/web2py/**gluon/globals.py",
>>>>>> line 137, in
>>>>>> > > <lambda>
>>>>>> >
>>>>>> > > > >>   /  self._caller = lambda f: f()
>>>>>> >
>>>>>> > > > >>   File
>>>>>> > > "/home/sebas/Downloads/web2py/**applications/welcome/**controllers/default.py"
>>>>>> <
>>>>>> > >http://localhost:8000/admin/**default/edit/welcome/**
>>>>>> controllers/default.py<http://localhost:8000/admin/default/edit/welcome/controllers/default.py>>,
>>>>>>
>>>>>> > > line 33, in user
>>>>>> >
>>>>>> > > > >>     return dict(form=auth())
>>>>>> >
>>>>>> > > > >>   File "/home/sebas/Downloads/web2py/**gluon/tools.py",
>>>>>> line 1070, in
>>>>>> > > __call__
>>>>>> >
>>>>>> > > > >>     return getattr(self,args[0])()
>>>>>> >
>>>>>> > > > >>   File "/home/sebas/Downloads/web2py/**gluon/tools.py",
>>>>>> line 1626, in
>>>>>> > > login
>>>>>> >
>>>>>> > > > >>     user =
>>>>>> > > self.get_or_create_user(table_**user._filter_fields(cas_user))
>>>>>> >
>>>>>> > > > >>   File "/home/sebas/Downloads/web2py/**gluon/tools.py",
>>>>>> line 1360, in
>>>>>> > > get_or_create_user
>>>>>> >
>>>>>> > > > >>     user = self.db(table_user[username] ==
>>>>>> > > keys[username]).select().**first()
>>>>>> >
>>>>>> > > > >> KeyError: 'email'
>>>>>> >
>>>>>> > > > >> any ideas , thanks
>>>>>> >
>>>>>> > > > >> --
>>>>>> > > > >> Sebastian E. Ovide
>>>>>> >
>>>>>> > > > --
>>>>>> > > > Sebastian E. Ovide
>>>>>> >
>>>>>> > --
>>>>>> > Sebastian E. Ovide
>>>>>
>>>>>  --
>>> Resources:
>>> - http://web2py.com
>>> - http://web2py.com/book (Documentation)
>>> - http://github.com/web2py/web2py (Source code)
>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "web2py-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to web2py+unsubscr...@googlegroups.com.
>>>
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>  --
>> Resources:
>> - http://web2py.com
>> - http://web2py.com/book (Documentation)
>> - http://github.com/web2py/web2py (Source code)
>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>> ---
>> You received this message because you are subscribed to a topic in the
>> Google Groups "web2py-users" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/web2py/qKmygzAdyME/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> web2py+unsubscr...@googlegroups.com.
>>
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>  --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to