In Auth.define_tables we define the user table thus:

         if not self.settings.table_user:
             passfield = self.settings.password_field
             self.settings.table_user = db.define_table(
                 self.settings.table_user_name,
                 db.Field('first_name', length=128, default=''),
                 db.Field('last_name', length=128, default=''),
                 # db.Field('username', length=128, default=''),
                 db.Field('email', length=128, default=''),
                 db.Field(passfield, 'password', readable=False,
                          label='Password'),
                 db.Field('registration_key', length=128,
                          writable=False, readable=False, default=''),
                  
migrate=self.__get_migrate(self.settings.table_user_name, migrate))
             table = self.settings.table_user
             table.first_name.requires =  
IS_NOT_EMPTY(error_message=self.messages.is_empty)
             table.last_name.requires =  
IS_NOT_EMPTY(error_message=self.messages.is_empty)
             table[passfield].requires = [CRYPT()]
             table.email.requires =  
[IS_EMAIL(error_message=self.messages.invalid_email),
                                     IS_NOT_IN_DB(db, '%s.email'
                                  %  
self.settings.table_user._tablename)]
             table.registration_key.default = ''

In Auth.register, we have the following auto-login sequence; there's  
similar logic in Auth.login, but it's clearer here:

             else:
                 user[form.vars.id] = dict(registration_key='')
                 session.flash = self.messages.registration_successful
                 table_user = self.settings.table_user
                 if 'username' in table_user.fields:
                     username = 'username'
                 else:
                     username = 'email'
                 users = self.db(table_user[username] ==  
form.vars[username])\
                     .select()
                 user = users[0]
                 user = Storage(table_user._filter_fields(user,  
id=True))
                 session.auth = Storage(user=user,  
last_visit=request.now,
                                    expiration=self.settings.expiration)
                 self.user = user
                 session.flash = self.messages.logged_in

Finally, the manual "Customizing auth_user" says, 'If you add a field  
called "username", it will be used in place of the "email" for login.'  
We see the username/email logic in Auth.register.

The problem is that the username field needs (like email) to be  
IS_NOT_EMPTY and IS_NOT_IN_DB, or the obvious bad thing can happen.

Is it enough to mention the need for the validations (maybe a complete  
sample line) in the manual?

Finally, shouldn't both email and username require unique=True?

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to