Leo, I http_x_forwarded_for was for reversed proxy web2py installations. I removed it until as you did until we find a better solution. I will look into registration_id issue as soon as I get on a desk...
tnx mic 2013/3/8 Leonardo M. Rocha <leo.m.ro...@gmail.com>: > Update, > > I found (testig with other facebook user) that the problem is not when > I reboot the server, but when a user tries to log in for the second > time. > > Following the trace I finally found that there is a call to the > gluon/dal.py RecordUpdater.__call__(**fields) > Where fields = {registration_id: u11111111111111} > > as registration_id is not in in table.fields [id, first_name, > last_name, username, password, registration_key] (auth_user defined in > helloFacebook) > > the field registration_id is erased from the dict: > > if not fieldname in table.fields or table[fieldname].type=='id': > del newfields[fieldname] > > and an empty call is issued to Auth.get_or_create_user(self, keys, > update_fields=['email']) (file in gluon/tools.py) > There is the reason of the error. > > BUT as I see, there is the need to have a "username" instead of a > registration_id for the call to be done correctly > and the table in my db.py is: > > auth_table = db.define_table( > auth.settings.table_user_name, > Field('first_name', length=128, default=""), > Field('last_name', length=128, default=""), > Field('username', length=128, default="", unique=True), > Field('password', 'password', length=256, > readable=False, label='Password'), > Field('registration_key', length=128, default= "", > writable=False, readable=False)) > > I tried with Field('registration_id', length=128, default="", > unique=True), instead of username, but this time the error is that > there is no 'email' field > > So following the login call, again I found out that > RecordUpdater.__call__(**fields) is generated only when the user has > already logged in at least once with facebook, the question is: Why > does it want to update the fields?? > > Checking: gluon/tools.py and gluon/dal.py > > again I found that the problem was in gluon/tools.py (line 1930) def > Auth.login() and in relationship with the field I do get > (registration_id, that I do not know where it comes, but I think is > from facebook) > > So this is what is in the file: > if self.settings.login_userfield: > username = self.settings.login_userfield > elif 'username' in table_user.fields: > username = 'username' > else: > username = 'email' > if 'username' in table_user.fields or \ > not self.settings.login_email_validate: > tmpvalidator = IS_NOT_EMPTY(error_message=self.messages.is_empty) > > And i added for it to actually check for registration_id also > > entonces le agregue: > if self.settings.login_userfield: > username = self.settings.login_userfield > elif 'username' in table_user.fields: > username = 'username' > elif 'registration_id' in table_user.fields: > username = 'registration_id' > else: > username = 'email' > if 'username' in table_user.fields or 'registration_id' in > table_user.fields or \ > not self.settings.login_email_validate: > tmpvalidator = IS_NOT_EMPTY(error_message=self.messages.is_empty) > > > This actually solves my problem, BUT, I want to know, Am I doing > something REALLY wrong here? > What would be a way to actually solve the issue but without modifying > the web2py framework? > Or it is seriously something to modify in the gluon/tools.py file? > >> >> Questions: >> Why is the system trying to update the DB when doing the login with OAuth? >> Have you got any clues on how to start solving the issue? > Any hints here? > > >> Another thing that I need to state: >> >> When first tried to login, the redirect address generated by OAuth was >> wrong, it gave my local personal IP address, instead of the one in the >> server (I don't know why), I managed to solve it modifying: >> >> gluon/contrib/login_methods/oauth20_account.py >> ------------------------------------------------------------------------------ >> 105 r = current.request >> 106 #http_host = r.env.http_x_forwarded_for #THIS was making a >> problem getting my laptop address instead of my server address ... WHY??? >> 107 http_host = r.env.http_host >> ------------------------------------------------------------------------------ >> >> Reading in the book (chapter The Core) and in the ref. >> I do not get why we should use env.http_x_forwarded_for instead of >> env.http_host , >> Don't we want the server address to be the redirection address? >> Why would we even want an address that is the client AND can be spoofed? > > Any hints here? > > > > > -- > Ing. Leonardo Manuel Rocha > > -- > > --- > 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. > > -- --- 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.