yes there is a lof code in here.

if you could use the existing auth.register() with

auth.settings.register_onvalidation=....
auth.settings.register_onaccept=...

you would avoid reinventing the wheel.

This in your code is not a good idea:

    users = db().select(db.auth_user.id, db.auth_user.username,
db.auth_user.email, orderby=db.auth_user.id)

    for user in users:
        if username==user.username:
            session.flash=T('Username already in use!')
            redirect(URL(r=request,c='default', f="register"))

        if email==user.email:
            session.flash=T('Email already in use!')
            redirect(URL(r=request,c='default', f="register"))
        my = str(user.id+1)

because you are fetching all records just to check if you have a
duplicate username or duplicate email. There are validators for that.

Anyway the registration verification mechanism consists of storing a
uuid in registration_key field.
You email the user the url
http://.../user/verify/[uuid]
When the user visits the url, the uuid is removed from the
registration_key field.



On Sep 7, 10:04 am, Francisco Costa <[email protected]> wrote:
> It's a bit big because of all the validations, but here it goes:
>
> import re, random, os, shutil
> def create():
>     first_name = request.vars.firstname
>     session.first_name = first_name
>
>     last_name = request.vars.lastname
>     session.last_name = last_name
>
>     email = request.vars.email
>     session.email = email
>
>     username = request.vars.username
>     session.username = username
>
>     password = request.vars.password
>     confirm_password = request.vars.confirm_password
>
>     domains = "aero", "asia", "biz", "cat", "com", "coop", \
>         "edu", "gov", "info", "int", "jobs", "mil", "mobi", "museum",
> \
>         "name", "net", "org", "pro", "tel", "travel"
>
>     if len(email) < 8:
>         session.flash=T('Please enter a valid email address')
>         redirect(URL(r=request,c='default', f="register"))
>
>     # Split up email address into parts.
>     try:
>         localpart, domainname = email.rsplit('@', 1)
>         host, toplevel = domainname.rsplit('.', 1)
>     except ValueError:
>         session.flash=T('Please enter a valid email address')
>         redirect(URL(r=request,c='default', f="register"))
>
>     # Check for Country code or Generic Domain.
>     if len(toplevel) != 2 and toplevel not in domains:
>         session.flash=T('Please enter a valid email domain name')
>         redirect(URL(r=request,c='default', f="register"))
>
>     for i in '-_.%+.':
>         localpart = localpart.replace(i, "")
>     for i in '-_.':
>         host = host.replace(i, "")
>
>     if not localpart.isalnum() and not host.isalnum():
>         session.flash=T('Please enter a valid email address')
>         redirect(URL(r=request,c='default', f="register"))
>
>     if not password==confirm_password:
>         session.flash=T('Please enter the same passwords!')
>         redirect(URL(r=request,c='default', f="register"))
>
>     users = db().select(db.auth_user.id, db.auth_user.username,
> db.auth_user.email, orderby=db.auth_user.id)
>
>     for user in users:
>         if username==user.username:
>             session.flash=T('Username already in use!')
>             redirect(URL(r=request,c='default', f="register"))
>
>         if email==user.email:
>             session.flash=T('Email already in use!')
>             redirect(URL(r=request,c='default', f="register"))
>         my = str(user.id+1)
>
>     password=db.auth_user.password.requires[0](password)[0]
>
>     photo_filename=''
>     photo_path=''
>     photo_file=''
>     photo = request.vars.photo
>
>     if not photo=='':
>         ext = re.compile('\.\w+$').findall(photo.filename.strip())[0]
>         if ext != '.jpg' and ext != '.png':
>             session.flash=T('Invalid image file')
>             return photo_filename
>         photo_filename = 'auth_user.picture.'+my
> +'.'+str(random.random())[2:] + ext
>         photo_path = os.path.join(request.folder, 'uploads/',
> photo_filename)
>         photo_file = open(photo_path,'wb')
>         shutil.copyfileobj(photo.file, photo_file)
>         photo_file.close()
>
>     user = db.auth_user.insert(first_name=first_name,
> last_name=last_name, email=email, username=username,
> password=password, picture=photo_filename)
>     mail.send(to='[email protected]', subject='new user', message="new
> user registed with email %s" %email)
>
>     form='image_crop'
>     session.photo_path=photo_path
>
>     if photo_file=='':
>         session.flash=T('Register OK')
>         redirect(URL(r=request, c='default', f="login"))
>     return dict(photo_filename=photo_filename, photo_file=photo_file,
> photo_path=photo_path, form=form, my=my)

Reply via email to