On Sep 20, 2010, at 8:07 AM, dustin.b wrote:
> 
> hi i simply upgraded from 1.84.1 to 1.85.1 and get a ticket. i
> narrowed down the issue to this:

This logic is wrong on its face:

        if 'username' in table_user.fields:
            if self.settings.login_userfield:
                userfield = self.settings.login_userfield
        elif 'username' in table_user.fields:
            userfield = 'username'
        else:
            userfield = 'email' 

A temporary workaround would be to set login_userfield


> 
> db.py
> ....
> 
> auth.settings.hmac_key = 'sha512:97655ab8-04d0-4321-
> b8fa-84f525fb8fe0'   # before define_tables()
> 
> db.define_table(
>    auth.settings.table_user_name,
>    Field('username', length=128, default='', unique=True),
> 
>    Field('password', 'password', length=512,
>          readable=False, label='Password'),
>    Field('registration_key', length=512,
>          writable=False, readable=False, default=''),
>    Field('reset_password_key', length=512,
>          writable=False, readable=False, default=''),
>    Field('registration_id', length=512,
>          writable=False, readable=False, default=''))
> 
> custom_auth_table = db[auth.settings.table_user_name] # get the
> custom_auth_table
> custom_auth_table.username.requires =
> IS_NOT_EMPTY(error_message=auth.messages.is_empty)
> 
> #custom_auth_table.password.requires = [IS_STRONG(), CRYPT()]
> 
> auth.settings.table_user = custom_auth_table # tell auth to use
> custom_auth_tabl
> 
> auth.define_tables()                           # creates all needed
> tables
> .....
> 
> test.py (controller)
> ....
> def myLogin():
> 
>    username = "peter"
>    password = "pass"
> 
>    user = auth.login_bare(username, password)
>    if not user:
>        return "failed"
>    else:
>        return "ok"
> ...
> 
> by invoking the test controllers myLogin function i get :
> 
> Traceback (most recent call last):
>  File "D:\DEV\python\web2py\stable\web2py_src\web2py\gluon
> \restricted.py", line 188, in restricted
>    exec ccode in environment
>  File "D:/DEV/python/web2py/stable/web2py_src/web2py/applications/
> error/controllers/test.py", line 23, in <module>
>  File "D:\DEV\python\web2py\stable\web2py_src\web2py\gluon
> \globals.py", line 96, in <lambda>
>    self._caller = lambda f: f()
>  File "D:/DEV/python/web2py/stable/web2py_src/web2py/applications/
> error/controllers/test.py", line 15, in iphoneLogin
>    user = auth.login_bare(username, password)
>  File "D:\DEV\python\web2py\stable\web2py_src\web2py\gluon\tools.py",
> line 1306, in login_bare
>    user = self.db(table_user[userfield] == username).select().first()
> UnboundLocalError: local variable 'userfield' referenced before
> assignment
> 
> in:
> 
> def login_bare(self, username, password):
> ......
>        elif 'username' in table_user.fields:
>            userfield = 'username'
>        else:
>            userfield = 'email'
>        passfield = self.settings.password_field
>        user = self.db(table_user[userfield] ==
> username).select().first() <-------- local variable 'userfield'
> referenced before assignment
> 
>        password = table_user[passfield].validate(password)[0]
>        if user:
>            if not user.registration_key and user[passfield] ==
> password:
>                user = Storage(table_user._filter_fields(user,
> id=True))
> 
> seems to be there is no userfield 'username' anyhow?
> 
> interestingly it works with 1.84.1 as expected
> 
> for testing here the project if your interested:
> http://rapidshare.com/files/420164051/web2py.app.error.w2p


Reply via email to