Ok thanks ! 

As a matter of fact I have indeed an unique option set for the problematic 
values. But I understood it as to prevent 2 same values for 2 different 
users : as for an email for example. But here I try to update the profile 
of the same user so obviously he should keep the same email or be able to 
anyway.

I join the faulty code.

-- 
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.
# -*- coding: utf-8 -*-
cache.ram.clear()
cache.disk.clear()


@auth.requires_login()
def index():
    administrator = True
    # verify if user is manager to be able to access administration menu
    for row in db(db.auth_user.first_name == db.auth_user.first_name).select():
        administrator   = row.is_manager
        first_name      = row.first_name
        last_name       = row.last_name
        nickname        = row.nickname
        email           = row.email
        address         = row.address
        postcode        = row.postcode
        city            = row.city
        country         = row.country
        website         = row.website

    # expose profile
    db.auth_user.first_name.default     = first_name
    db.auth_user.last_name.default      = last_name
    db.auth_user.nickname.default       = nickname
    db.auth_user.email.default          = email
    db.auth_user.address.default        = address
    db.auth_user.postcode.default       = postcode
    db.auth_user.city.default           = city
    db.auth_user.country.default        = country
    db.auth_user.website.default        = website

    # TODO : CRUD TO READ
    from gluon.tools import Crud
    crud = Crud(db)

    form = crud.update(db.auth_user, request.args(0))

    if form.process(keepvalues=True, dbio=True).accepted:
        response.flash = 'Your data has been updated'
    elif form.errors:
        response.flash = 'Some errors have been encountered ! Please contact your administrator.'

    return dict(administrator=administrator, navbar_disable=False, form=form)


def user():
    # CONTEXT DICTIONARY
    context = {}

    # DELETE COOKIES WHEN LOGOUT
    if request.args[0] == 'logout':
        for cookie_name in ['session_id_welcome', 'session_id_forums']:
            response.cookies[cookie_name] = 'invalid'
            response.cookies[cookie_name]['expires'] = -10
            response.cookies[cookie_name]['path'] = '/'

    # ENABLE REGISTER
    if request.args[0] == 'register':
        # ### VERIFICATION EMAIL
        mail_config = {
            'title': auth.default_messages.get('verify_email_subject'),
            'subject_title': 'Verification email process..',
            'verification_url': URL('default', 'user', scheme='http', args=['verify_email']) + '/%(key)s',
            'verification_url_on_site': URL('default', 'browser_email', scheme='http') + '?key=%(key)s',
            'verification_url_on_site_enabled': True,
            'main_title_enabled': False,
            'secondary_title_enabled': False,
            'verify_email_block_enabled': True,
            'spacer': URL('static', 'images/spacer.gif', scheme='http'),
        }

        auth.messages.verify_email = response.render('templates/email_verification.html', mail_config)

    # AND LAST, RETURN FORM IN DICT
    context['form'] = auth()

    return context


def browser_email():

    mail_config = dict(
        title=auth.default_messages.get('verify_email_subject'),
        subject_title='Verification email process..',
        verification_url=URL('default', 'user', scheme='http',
                             args=['verify_email']) + '/' + request.vars['key'],
        verification_url_on_site='',
        verification_url_on_site_enabled=False,
        illustration_image_enabled=False,
        main_title_enabled=False,
        secondary_title_enabled=False,
        verify_email_block_enabled=True,
        spacer=URL('static', 'images/spacer.gif', scheme='http'),
    )

    return response.render('templates/email_verification.html', mail_config)

# -*- coding: utf-8 -*-
# File is released under public domain and you can use without limitations

# auto-reload modules when changes are made
from gluon.custom_import import track_changes
track_changes(True)

# app configuration made easy, look inside private/appconfig.ini
from gluon.contrib.appconfig import AppConfig

# TODO : once in production, remove reload=True to gain full speed
my_conf = AppConfig(reload=True)

# connect to database
db = DAL(my_conf.take('db.uri'))

# necessary various imports
from gluon.tools import Auth, Service, PluginManager
auth    = Auth(db)
service = Service()
plugins = PluginManager()

# give access to possibly current.(request, session, db, auth, response, T, cache)
# and many custom variables added by the current developer
from gluon import current
current.db      = db
current.auth    = auth

# if SSL/HTTPS is properly configured and you want all HTTP requests to
# be redirected to HTTPS, uncomment the line below:
# request.requires_https()

# ####################################################### SHARING SESSIONS
# record in a table on the database that the other application will access
session.connect(request, response, tablename='sessions')

# by default give a view/generic.extension to all actions from localhost
# none otherwise. a pattern can be 'controller/function.extension'
response.generic_patterns = ['*'] if request.is_local else []
# choose a style for forms
response.formstyle = my_conf.take('forms.formstyle')  # or 'bootstrap3_stacked' or 'bootstrap2' or other
response.form_label_separator = my_conf.take('forms.separator')


# create auth table
db.define_table(
    auth.settings.table_user_name,
    Field('first_name',         length=128),
    Field('last_name',          length=128),
    Field('nickname',           length=128, unique=True),
    Field('email',              length=128, unique=True),
    Field('password', 'password', length=512, readable=False, writable=False, label='Password'),
    Field('address',            length=256),
    Field('postcode',           length=128),
    Field('city',               length=128),
    Field('country',            length=128, requires=IS_IN_SET(countries.COUNTRIES)),
    Field('website',            length=512),
    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=''),
    Field('auth_created_on',    length=512, writable=False, readable=False, default='',
          required=True),
    Field('auth_modified_on',   length=512, writable=False, readable=False, default='',
          required=True),
    Field('is_enabled',         type='boolean', writable=False, readable=False, default=True,
          required=False),
    Field('is_manager',         type='boolean', writable=False, readable=False, default=True),
    migrate=False
)


# configure custom_auth_table
custom_auth_table                       = db[auth.settings.table_user_name]
custom_auth_table.first_name.requires   = IS_NOT_EMPTY(error_message=auth.messages.is_empty)
custom_auth_table.last_name.requires    = IS_NOT_EMPTY(error_message=auth.messages.is_empty)
custom_auth_table.password.requires     = [IS_STRONG(min=8), CRYPT(digest_alg='sha512', salt=True)]
custom_auth_table.email.requires        = [
    IS_EMAIL(error_message=auth.messages.invalid_email),
    IS_NOT_IN_DB(db, custom_auth_table.email)
]


# configure auth policy
auth.settings.registration_requires_verification    = True
auth.settings.registration_requires_approval        = False
auth.settings.reset_password_requires_verification  = True
auth.settings.login_after_registration              = False
auth.settings.logged_url                            = URL('profile', 'default', 'index')
auth.settings.showid                                = False
auth.settings.table_user                            = custom_auth_table


# define tables
auth.define_tables(username=False, signature=True, migrate=False)


# configure email
mail                    = auth.settings.mailer
mail.settings.server    = my_conf.take('smtp.server')  # 'logging' if request.is_local else
mail.settings.sender    = my_conf.take('smtp.sender')
mail.settings.login     = my_conf.take('smtp.login')
mail.settings.tls       = True


auth.messages.reset_password = '<html>Click on the link http://' + request.env.http_host\
                               + URL(r=request, c='default', f='user',
                                     args=['reset_password'])\
                               + '/%(key)s to reset your password</html>'

# after defining tables, uncomment below to enable auditing
# auth.enable_record_versioning(db)

Reply via email to