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