I see that only the first time that user login, web2py saves the
employee_id.
If I logout and login, and I change the employee_id value (I write this in
external file to see the value), web2py does not update the field.
On Tuesday, January 8, 2013 11:08:34 AM UTC-6, Ignacio Ocampo wrote:
>
> I only return a dict in the get_user, web2py does all the work.
>
> web2py call the get_user method, and web2py update the auth_user table
> with the dict values.
>
> I don't write/update the auth_user table in my custom class.
>
> On Tuesday, January 8, 2013 11:05:04 AM UTC-6, Niphlod wrote:
>>
>> hypothesis 2 is off the table
>>
>> BTW: saying that you have a method that returns a dict and stating that
>> that method doesn't update a field lacks of the key point......
>> *Who*writes/updates the auth_user table in your custom class ?
>>
>> On Tuesday, January 8, 2013 5:36:39 PM UTC+1, Ignacio Ocampo wrote:
>>>
>>> Hi,
>>>
>>> I'm working with my own authentication provider as: *
>>> auth.settings.login_form=MyAuth()*, all *works correctly*.
>>>
>>> I need an additional field from default auth_user table definition, I
>>> used: *auth.settings.extra_fields['auth_user'] = [Field('**employee_id**',
>>> 'text')]*, works correctly (the value of this field is provided by
>>> MyAuth() to reference another system, ergo, in web2py it's would be treated
>>> as a simple text).
>>>
>>> The final schema is:
>>>
>>> CREATE TABLE auth_user(
>>> id INTEGER PRIMARY KEY AUTOINCREMENT,
>>> first_name CHAR(128),
>>> last_name CHAR(128),
>>> email CHAR(512),
>>> password CHAR(512),
>>> registration_key CHAR(512),
>>> reset_password_key CHAR(512),
>>> registration_id CHAR(512)
>>> , *employee_id* TEXT);
>>>
>>> In MyAuth() class, I have the method get_user(self), which web2py call
>>> in the login process to get user details. At the end of this method, I
>>> return:
>>>
>>> user = dict(first_name=response['attributes']['cn'][0],
>>> last_name=response['attributes']['cn'][0],
>>> username=response['attributes']['uid'][0],
>>> registration_id=response['attributes']['uid'][0], *employee_id*
>>> =response['attributes']['*employee_id*'][0])
>>>
>>> All fields are updated correctly, except the *employee_id*, that is the
>>> additional field.
>>>
>>> *Hypothesis 1*: I don't know if web2py is updating only default fields
>>> from the auth_user table (and because employee_id are not default field,
>>> it's no updated).
>>> *Hypothesis 2*: The name of the additional field *employee_id* is
>>> malformed (because the last part "_id" is used to reference another table
>>> and commonly is INT type and web2py don't know how to handle this, since
>>> there is no the *employee* table).
>>>
>>> Thank you.
>>>
>>
--