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 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.