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.

Reply via email to