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.


Reply via email to