correct on both accounts. I will get this fixed in the code and the
manual. Thanks.

Massimo

On Jul 12, 11:44 am, Jonathan Lundell <[email protected]> wrote:
> 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