Sorry for all these self replies. I have it narrowed down to the register
form. I have all the other auth forms working properly.
My register form handling looks like this:
if 'register' in request.args(0):
# parse the referring URL to see if we can pre-populate the
course_id field in
# the registration form
form.vars.course_id = '' # set it to be empty if we can't
pre-populate
ref = request.env.http_referer
if ref:
if '_next' in ref:
ref = ref.split("_next")
url_parts = ref[1].split("/")
else:
url_parts = ref.split("/")
for i in range(len(url_parts)):
if "static" in url_parts[i]:
course_id = url_parts[i+1]
form.vars.course_id = course_id
break
I'm setting form.vars.course_id based on some application logic. However, I
can't figure out how to get the pre-populated value to display. It seems
like I should have a call to form.process() to actually populate the form
widget(*), but if I put such a call in, the register form breaks: it adds
an entry to auth_users, but includes a registration key, and the page does
not redirect properly. (In other words, I get the "success" flash, but the
browser stays on the registration page and the user is not automatically
logged in.)
What exactly do I need to do to pre-populate a value in this registration
form?
* I did exactly this to pre-populate some values in the user "profile" form
and it worked perfectly.
On Thursday, June 27, 2013 8:43:32 AM UTC-5, Isaac Dontje Lindell wrote:
>
> def user():
> form = auth()
>
> if 'register' in request.args(0):
> # parse the referring URL to see if we can prepopulate the
> course_id field in
> # the registration form
> ref = request.env.http_referer
> if ref:
> if '_next' in ref:
> ref = ref.split("_next")
> url_parts = ref[1].split("/")
> else:
> url_parts = ref.split("/")
>
> for i in range(len(url_parts)):
> if "static" in url_parts[i]:
> course_id = url_parts[i+1]
> form.vars.course_id = course_id
> break
>
> # we can't prepopulate, just set it to empty
> else:
> form.vars.course_id = ''
>
>
> if 'login' in request.args(0):
> # add info text re: using local auth. CSS styled to match text on
> Janrain form
> sign_in_text = TR(TD('Sign in with your RSI account', _colspan='3'
> ), _id='sign_in_text')
> form[0][0].insert(0, sign_in_text)
>
>
> if 'profile' in request.args(0):
> form.vars.course_id = auth.user.course_name
>
> try:
> if form.process().accepted:
> # auth.user session object doesn't automatically update when
> the DB gets updated
> auth.user.update(form.vars)
> auth.user.course_name = db(db.auth_user.id == auth.user.id).
> select()[0].course_name
>
> redirect(URL('default','index'))
> except AttributeError:
> # Janrain login form wrapped in the ExtendedLoginForm doesn't
> have the process() method
> # (which makes sense because we have no ability to process the
> Janrain form)
> pass
>
>
> return dict(form=form)
>
> Above is the contents of my user controller. I have been trying to use the
> ExtendedLoginForm to integrate Janrain (which works perfectly - I can
> register/login with Janrain without a problem. However, I still can't get
> local registration working. I've actually switched back to just using the
> local Auth form right now for testing but am still getting the wrong
> behavior.
>
> If I remove all the code from the user controller except the lines
> form = auth()
> return dict(form=form)
> everything works as expected. Obviously this indicates a problem with my
> code, I'm just not sure what exactly. What I'm trying to do in most of
> these cases is prepopulate one of the fields in the auth form (specifically
> the course_id field).
>
> On Thursday, June 27, 2013 8:21:41 AM UTC-5, Isaac Dontje Lindell wrote:
>>
>> Sorry, should have specified. Version 2.4.6-stable
>>
>> On Thursday, June 27, 2013 1:31:14 AM UTC-5, Massimo Di Pierro wrote:
>>>
>>> Which web2py version?
>>>
>>> On Wednesday, 26 June 2013 11:16:11 UTC-5, Isaac Dontje Lindell wrote:
>>>>
>>>> I have this in my db.py model:
>>>>
>>>> ## configure auth policy
>>>> auth.settings.registration_requires_verification = False
>>>> auth.settings.registration_requires_approval = False
>>>> auth.settings.reset_password_requires_verification = True
>>>>
>>>> If I register for the application (at %app%/default/user/register), it
>>>> goes through (I get a "Success" flash and an entry is added to the
>>>> auth_user table.) However, every time I register, a registration_key is
>>>> added to the auth_user entry. The user is prevented from logging in until
>>>> I
>>>> remove the registration key from the auth_user row manually.
>>>>
>>>> It's my understanding that the first 2 lines above should stop a
>>>> registration_key from being added or created - the user should be able to
>>>> log in immediately.
>>>>
>>>> What am I missing?
>>>>
>>>
--
---
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.