Stick the following code in a controller
import copy
user_table = [copy.copy(f) for f in db.auth_user]
form = SQLFORM.factory(
*user_table,
Field('password2', 'password', length=512,
requires=db.auth_user.password.requires),
)
if form.accepts(request.vars, session):
if form.vars.password == form.vars.password2:
user = db.auth_user.insert(
first_name = form.vars.first_name,
last_name = form.vars.last_name,
username = form.vars.username,
password = form.vars.password,
registration_key = web2py_uuid(),
)
if auth.settings.create_user_groups:
group_id = auth.create_group("user_%s" user.id)
# etc etc for sending mail
# to auto log them in
session.auth = Storage(user = user, last_visit = request.now,
expiration = auth.settings.expiration)
else:
form.errors.password = form.errors.password2 = "Passwords do not match"
Of course, you lose some of the finer things such as sending emails,
which could be added by looking at tools.py
--
Thadeus
On Mon, May 24, 2010 at 7:39 PM, weheh <[email protected]> wrote:
> @mdp: It isn't obvious to me how to mix the auth code with
> SQLFORM.factory and accept. The problem is that auth is such a black
> box that I don't know where to break into the flow of it.
>
> I believe this issue has come up enough times and been such a
> consistent stumbling block that I suggest you or someone else spell it
> out concretely (show the model, controller, and view) and put it
> either in the doc or in Alterego or somewhere findable. I can't
> imagine it's more than 20 or 30 lines of code total and would save
> loads of time and effort in the long run.
>