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

Reply via email to