You can have my function. 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.

Reply via email to