Create an account with cookiecrumbler
Hi, A form requires authentication data for subscription. I handle this data with a python script and create a new user in acl_user with 'member' role. Till there all's OK. Then I add some instructions in this script to log this new user with CookieCrumbler, as indicated in the default provided "login_form" ... context.acl_users.manage_users(submit='Add', REQUEST=context.REQUEST) context.REQUEST.form['__ac_name'] = form['newusername'] context.REQUEST.form['__ac_password'] = form['newpassword'] context.REQUEST.form['__ac_persistent'] = '1' context.REQUEST.form['came_from'] = 'minimum_html' return context.logged_in(context, REQUEST=context.REQUEST) What's strange : 1/ This does not work 2/ The new user is not created when adding the lines that _try to_ log using CookieCrumbler Any idea ? Thanks in advance --Gilles
Gilles Lenfant writes:
Then I add some instructions in this script to log this new user with CookieCrumbler, as indicated in the default provided "login_form"
.... context.acl_users.manage_users(submit='Add', REQUEST=context.REQUEST)
context.REQUEST.form['__ac_name'] = form['newusername'] context.REQUEST.form['__ac_password'] = form['newpassword'] context.REQUEST.form['__ac_persistent'] = '1' context.REQUEST.form['came_from'] = 'minimum_html' return context.logged_in(context, REQUEST=context.REQUEST)
What's strange :
1/ This does not work
2/ The new user is not created when adding the lines that _try to_ log using CookieCrumbler When you read
<http://www.dieter.handshake.de/pyprojects/zope/book/chap3.html> you will see that ZPublisher performs authentication only once, *BEFORE* it calls the object identified by the request URL. As a consequence, your modifications to "REQUEST.form" are not seen by CookieCrumbler because it is not called after the changes. This explains 1) 2) is clear too: because there is no reauthentication, your "logged_in" raises an Unauthorized exception. This exception, like all exceptions, aborts the current transaction: the ZODB is not modified. You should "redirect" after you added the user. This will cause a new request together with a new authentication. Dieter
participants (2)
-
Dieter Maurer -
Gilles Lenfant