In terms of UI, at the [home]/index.html and the .../default/user/register 
are both displaying the form correctly. It includes:
- username
- password
- confirm password
- Invite Code

The workflow for both should be:
- load form in view
- user enters info and hits return
- user is automatically logged in and sent to .../accounts/index; with no 
registration required

For 
../default/user/register this workflow is occurring as it should.
For [home]/index.html with the embedded form, it is sending user to the 
.../default/user/login page. It does create the account.  But when 
attempting to login that user in, it is requiring registration. And it is 
entering a registration key into the auth_user table.

If I make it a custom form for the [home]/index.html  then the automatic 
password hashing is not be applied in the DB, and I don't get the password 
verification. And to make all of that work I am managing an extra form and 
all of its related actions, that since it is the auth can have impact 
across alot of funtions in the app. So it would be ideal to just have this 
work without having to create a custom form.

I've pasted the code below. Thanks for the help.

-b

--

```python
from gluon.tools import Auth, Service, PluginManager

auth = Auth(db)
service = Service()
plugins = PluginManager()


## after auth = Auth(db)
db.define_table(
    auth.settings.table_user_name,
    Field('first_name', length=128, default='', writable=False, 
readable=False),
    Field('last_name', length=128, default='', writable=False, 
readable=False, ),
    Field('username', label=T('Username'), length=128, default='', 
unique=True),
    Field('email', length=128, writable=False, readable=False), # required
    Field('password', 'password', length=512,            # required
          readable=False, label=T('Password')),
    Field('token', label=T('Invite Code'), length=128, default=''),
    Field('new_status', type='boolean', writable=False, readable=False),
    Field('registration_key', length=512,                # required
          writable=False, readable=False, default=''),
    Field('reset_password_key', length=512,              # required
         writable=False, readable=False, default=''),
    Field('registration_id', length=512,                 # required
          writable=False, readable=False, default=''))

## do not forget validators

custom_auth_table = db[auth.settings.table_user_name] # get the 
custom_auth_table
custom_auth_table.username.requires = IS_NOT_IN_DB(db, 
custom_auth_table.username)
custom_auth_table.token.requires = [IS_IN_DB(db, 'tokens.token', 
'%(name)s', error_message=T('This is not a valid token or it has expired. 
Please obtain a new token and try again'))]
custom_auth_table.password.requires=IS_LENGTH(minsize=15, maxsize=60, 
error_message=T('Your password must be at least 15 character long'))
custom_auth_table.email.requires = 
[IS_EMAIL(error_message=auth.messages.invalid_email)]
custom_auth_table.registration_requires_verification = False
custom_auth_table.password_min_length = 15

auth.settings.table_user = custom_auth_table # tell auth to use 
custom_auth_table

#db.custom_auth_table._after_insert.append(lambda f, id: assign_group(f, 
id))

# custom fields used to manage Services group management
auth.settings.extra_fields['auth_group']= [
    Field('member_count', type='integer', default=1), 
    Field('group_type', length=128)]


auth.settings.remember_me_form=False
# hide retrieve username since we won't collect emails from users
auth.settings.login_after_registration = True
auth.settings.login_next = URL('xx', 'accounts', 'index')
auth.settings.register_next = URL('xx', 'accounts', 'index')

## before auth.define_tables()
auth.settings.registration_requires_verification = False
auth.settings.registration_requires_approval = False
auth.settings.login_after_registration = True

auth.define_tables(username=True, signature=False)
```

Here is the relevant portion from the controller (default.py)
```python
def index():
    #T.set_current_languages('zh-cn')
    form=auth.register()
    if form.process().accepted:
        userID= form.vars.id
        # assign user to group and appropriate services
        user_group_assignment(userID)
        # log user in and redirect to accounts main page
        auth.login_bare(request.vars.username, request.vars.password)
        redirect(URL('accounts', 'index'))
    elif form.errors:
        response.flash = 'An error has occurred when attempting to make 
your new account. Please try again, and if the problem persists please 
contact xx support'
    return dict(form=form)
```

Here is the relevant portion of the view (default/index.html):

```html
 <div style="background-color: rgb(133, 24, 152);" class="container row 
featurette quote-row" id="signup">
      <div class="col-md-7">
        <h1>{{=T("Sign Up")}}</h1>
         <p class="lead">{{=T("Complete the form below to receive a 
password, and access to all of our computer services.")}}</p>
      </div>
  </div>

  <div class="container marketing">
    
    {{=form}}

  </div><!-- /.container -->
```

  



On Wednesday, June 6, 2018 at 10:12:04 AM UTC-4, Anthony wrote:
>
> The Auth settings should work the same in either case. Please show your 
> exact code (model, controller, view) and describe the exact workflow (i.e., 
> exactly what you do and see in the UI) in both cases.
>
> Also, note that if you just want to change the visibility and/or 
> validators of particular fields, you can do so without a custom table 
> definition. Just apply the changes after defining the table. For example:
>
> def hide_fields(table, fieldnames):
>     for fieldname in fieldnames:
>         table[fieldname].readable = table[fieldname].writeable = False
>
> hide_fields(db.auth_user, ['first_name', 'last_name', 'email'])
>
> Anthony
>
> On Tuesday, June 5, 2018 at 3:13:11 PM UTC-4, b.l. masters wrote:
>>
>> Hi
>>
>> I've created a custom auth table to hide unwanted fields, and add 
>> validators in the db.py file to better manage the registration process. As 
>> part of this, within the db.py, I also include lines to *not* require 
>> verification or approval. When I use  .../default/user/register this 
>> feature works just as expected.
>>
>> However, when I call the form, in default.py using:
>>
>>   form=auth.register()
>>
>> It appears as I need to when embed {{=form}} into the view. However, once 
>> the registration is complete it is still requiring verification. How can I 
>> get requires_verification = False to apply to my embedded form as well?
>>
>> Below, I pasted the table definition and related settings, in db.py
>> (note, I also tried changing the settings with the custom table name, and 
>> this did not work).
>>
>> On a related note, I did try to avoid creating a custom auth table, and 
>> just add some extra fields to the existing one. But I could not get any 
>> validators to work to be ale to "hide" the required fields that I don't 
>> want that are part of auth, nor to be able to modify the other features I 
>> wanted. 
>>
>> Thanks for any help
>>
>> ---
>>
>> db.define_table(
>>     auth.settings.table_user_name,
>>     Field('first_name', length=128, default='', writable=False, 
>> readable=False),
>>     Field('last_name', length=128, default='', writable=False, 
>> readable=False, ),
>>     Field('username', label=T('Username'), length=128, default='', 
>> unique=True),
>>     Field('email', length=128, writable=False, readable=False), # required
>>     Field('password', 'password', length=512,            # required
>>           readable=False, label=T('Password')),
>>     Field('token', label=T('Invite Code'), length=128, default=''),
>>     Field('new_status', type='boolean', writable=False, readable=False),
>>     Field('registration_key', length=512,                # required
>>           writable=False, readable=False, default=''),
>>     Field('reset_password_key', length=512,              # required
>>          writable=False, readable=False, default=''),
>>     Field('registration_id', length=512,                 # required
>>           writable=False, readable=False, default=''))
>>
>> custom_auth_table = db[auth.settings.table_user_name] # get the 
>> custom_auth_table
>>
>> auth.settings.registration_requires_verification = False
>> auth.settings.registration_requires_approval = False
>> auth.settings.login_after_registration = True
>> auth.settings.login_next = URL('appname', 'accounts', 'index')
>> auth.settings.register_next = URL('appname', 'accounts', 'index')
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to