Alternately, simply remove line 3628 of gluon/tools.py table_user['email'].writable = False
On Friday, December 14, 2018 at 10:25:10 AM UTC-6, Leonel Câmara wrote: > > I think this problem was caused by CAS, but there were other problems, > namely that it would not check the new email again if it required > verification. Anyway you can have my function. > > def change_email(): > from gluon.utils import web2py_uuid > from gluon.tools import replace_id > table_user = auth.table_user() > if not auth.is_logged_in(): > redirect(auth.settings.login_url, > client_side=auth.settings.client_side) > next = auth.get_vars_next() > form = SQLFORM.factory(table_user.email) > if form.accepts(request, session, formname='change_email', hideerror= > auth.settings.hideerror): > key = web2py_uuid() > if auth.settings.registration_requires_verification: > key = 'pending-' + key > link = auth.url( > auth.settings.function, args=('verify_email', key), scheme > =True) > table_user[auth.user_id].update_record(email=form.vars.email, > key=key) > auth.user.update(table_user._filter_fields(form.vars)) > d = dict(auth.user) > d.update(dict(key=key, link=link, firstname=auth.user. > first_name, lastname=auth.user.last_name, username=form.vars.email)) > if not (auth.settings.mailer and auth.settings.mailer.send( > to=form.vars.email, > subject=auth.messages.verify_email_subject, > message=auth.messages.verify_email % d)): > auth.db.rollback() > response.flash = auth.messages.unable_send_email > return form > session.flash = auth.messages.email_sent > if not next: > next = URL(args=request.args) > else: > next = replace_id(next, form) > redirect(next, client_side=auth.settings.client_side) > return form > > You can just stick it inside the user function in the default controller > and then before return dict(form=auth()) put something like: > > > if request.args(0) == 'change_email': > return dict(form=change_email()) > > Finally add a link to change the email in the user.html view when you're > editing the profile: > > {{ > if request.args(0) == 'profile': > form.element(_id='auth_user_email__row').append(A(I(_class='fa > fa-pencil'), _href=URL(c='default', f='user', args=['change_email'], vars > ={'_next': URL(c='default', f='user', args=['profile'])}), _class="ml-1")) > pass > }} > > > put that before the {{=form}} > > > > > -- 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.