Hello,
I've been experimenting a really annoying issue that came up from nowhere
'cause the app was working perfectly. This is the scenario:
A mobile app user(iOS) enter his credentials on Facebook and gets the
corresponding auth token and personal data(JSON).
The mobile app sends for the first time that data(name,last name, token,
etc) to the server in JSON and the server processes it and store it if no
errors occurred.
This is the code(yes, it's really ugly but I'm a n00b):
Controller:
@service.json
def first_time():
data = gluon.contrib.simplejson.loads(request.body.read())
graph = GraphAPI(data['token'])
#We check that email and token exists and are valid, otherwise we store
it for the first time.
mail_check = db(db.auth_user.email==data['email']).select()
if mail_check:
token = db((db.auth_user.facebook_token!=data['token'])&(db.
auth_user.email==data['email'])).select()
if token:
try:
profile = graph.get_object("me")
if profile:
id = db(db.auth_user.email==data['email']).update(
facebook_token=data['token'])
return "token_updated"
except:
return "invalid_token1"
else:
#We create a new user!
try:
profile = graph.get_object("me")
if profile:
new = db.auth_user.insert(
first_name=data['first_name'],
last_name=data['last_name'],
birthday= datetime.strptime(data['birthday'],'%d/%m/%Y'
).strftime('%Y-%m-%d'),
email=data['email'],
facebook_id=data['id'],
facebook_token=data['token'],
wizard=data['wizard'])
return "new_user"
except:
return "ivalid_token2"
return "user_exists"
db.py:
from gluon.tools import Auth
auth = Auth(db, hmac_key=Auth.get_or_create_key())
auth.settings.extra_fields['auth_user']= [
Field('birthday', 'date'),
Field('facebook_id', 'string'),
Field('facebook_token', 'string'),
Field('wizard', 'boolean'),
]
JSON:
{
"first_name": "Luciano",
"last_name": "Laporta Podazza",
"country" : "Argentina",
"date" : "2013-01-14",
"email" : "[email protected]",
"province" : "Tucumán",
"timestamp" : "2013-01-14 06:13:45",
"token" : "(token)"
}
This was actually working and I didn't modified anything(really). Now, the
issue that I have is that with valid information the data isn't stored in
the DB and get the "invalid_token2" error.
Notes:
- Facebook data is valid(specially tokens), I've tested all of them
externally with GraphAPI and they work.
- If I comment the whole .insert I get the "new_user" string, which is
what I'm looking for. So this makes me think that something with the insert
is wrong
- All tables and fields are correct, they have been tested and working
before this issue.
- I've tried changing database adapters(I was using mysql and now sqlite
and still get the same error).
- All facebook accounts are valid and verified.
- For some reason, some times it stores the data, and some times not,
it's kind of random.
Any suggestions?. Thanks in advance!
--