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 <[email protected]>
> 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" <[email protected]>
>>>> 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 <
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > [email protected]> wrote:
>>>> > > if there is agreement on one, please send me a patch.
>>>> >
>>>> > > On Jun 6, 4:31 pm, "Sebastian E. Ovide" <[email protected]>
>>>>
>>>> > > 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 <
>>>> >
>>>> > > > [email protected]> 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 <[email protected]>
>>>> >
>>>> > > > > 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 [email protected].
> 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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.