It's pretty straightforward - there are 2 registration links in the menu and each of them links to default/register/[group_type]. Then, in the view, request.args(0) value is being checked to generate respective form. Guess, I'll go for the request.args(0) limitation, as you wrote.
By the way, can I stop (revert?) the registration process when user tries to register with non-specified URL argument? Like this: 1. User submits the form 2. onaccept callback checks if the URL argument is equal to one of 2 specified 3. If not, registration takes no place (new user is not created) and the application redirects to a different (error) page W dniu piątek, 7 czerwca 2013 15:23:00 UTC+2 użytkownik Anthony napisał: > > How do users get to their respective registration URLs to begin with? If > they are sent a link via email, you could use a digital > signature<http://web2py.com/books/default/chapter/29/04#Digitally-signed-urls>. > > If they are allowed to choose the group themselves by making a selection, > then your current method is fine, but you should still check that > request.args(0) is limited to only the two allowed groups (so if you have > an admin group or some other roles with greater restrictions users won't be > able to assign themselves to those roles). > > Anthony > > On Friday, June 7, 2013 6:39:56 AM UTC-4, lesssugar wrote: >> >> That's my concern also. I simply would like to make a transparent >> registration for 2 groups separately. In order to do so I have two >> different forms generating depending on URL argument: >> default/register/[group1] or [group2]. Checking request.args(0) on >> "onaccept" seemed obvious but it needs improvements. >> >> Is it a good idea to check also a specific form id attribute when >> performing onaccept? How do I check the form id attribute value? Or maybe >> there's a better way do make sure noone messes with the URL arguments? >> >> On Friday, June 7, 2013 3:18:29 AM UTC+2, Anthony wrote: >>> >>> Yes, you should not call .process() after calling auth.register() >>> because the second time through .process() it will fail (the _formkey token >>> is only good for one process -- so it fails on the second). Using an >>> onaccept callback is the way to go. However, it appears you are allowing >>> your users to assign themselves to any arbitrary group simply by >>> manipulating an arg in the URL -- that doesn't seem like a good idea. >>> >>> Anthony >>> >>> On Thursday, June 6, 2013 7:56:56 PM UTC-4, lesssugar wrote: >>>> >>>> OK, I figured out something like this and it works (let me know if it's >>>> not correct in any way): >>>> >>>> In db.py model: >>>> >>>> auth.settings.create_user_groups = False >>>> >>>> and then >>>> >>>> def add_group(form): >>>> group_id = auth.id_group(role=request.args(0)) >>>> auth.add_membership(group_id, form.vars.id) >>>> >>>> auth.settings.register_onaccept.append(add_group) >>>> >>>> >>>> >>>> >>>> On Friday, June 7, 2013 1:35:41 AM UTC+2, lesssugar wrote: >>>>> >>>>> Sorry, there is one more "but". After renaming the form all goes well, >>>>> except that this piece of code >>>>> >>>>> if register_form.accepts(request.vars, formname='register'): >>>>> auth.add_membership(group_id=1, >>>>> user_id=register_form.vars.id<http://register_form_s.vars.id> >>>>> ) >>>>> >>>>> no longer adds the right membership to user. It gives them the default >>>>> group: user_[id], while earlier adding to "group 1" worked properly. >>>>> >>>>> On Friday, June 7, 2013 1:11:23 AM UTC+2, Anthony wrote: >>>>>> >>>>>> I think the form processing within the auth.register() function is >>>>>> probably failing because you have renamed the form to 's_registration', >>>>>> and >>>>>> it is expecting a form named 'register' (it uses the formname to check >>>>>> the >>>>>> _formkey value in the session). If the form doesn't get accepted, it >>>>>> doesn't get to the redirect logic. >>>>>> >>>>>> Anthony >>>>>> >>>>>> On Thursday, June 6, 2013 6:59:51 PM UTC-4, lesssugar wrote: >>>>>>> >>>>>>> Right, thanks. But what about the "next" attribute? What might be >>>>>>> the reason of the argument not working? >>>>>>> >>>>>>> On Friday, June 7, 2013 12:53:35 AM UTC+2, Anthony wrote: >>>>>>>> >>>>>>>> auth.register() automatically processes the form, so you should not >>>>>>>> subsequently call request_form.process(). >>>>>>>> >>>>>>>> Anthony >>>>>>>> >>>>>>>> On Thursday, June 6, 2013 6:21:52 PM UTC-4, lesssugar wrote: >>>>>>>>> >>>>>>>>> After user registers, I would like to redirect them to a different >>>>>>>>> URL, let's say default/index. >>>>>>>>> >>>>>>>>> Auto-login in db.py is set to False. >>>>>>>>> >>>>>>>>> In my default.py controller I have this: >>>>>>>>> >>>>>>>>> register_form = auth.register(next=URL('default', 'index')) >>>>>>>>> register_form.update(_class='formstyle', _name='s_registration') >>>>>>>>> if register_form.process().accepts(request.vars, >>>>>>>>> formname='s_registration'): >>>>>>>>> auth.add_membership(group_id=1, >>>>>>>>> user_id=register_form.vars.id<http://register_form_s.vars.id> >>>>>>>>> ) >>>>>>>>> >>>>>>>>> return dict(register_form=register_form) >>>>>>>>> >>>>>>>>> So after user registers, no redirection takes place. However, the >>>>>>>>> registration itself is correct (checked auth_user and auth_membership >>>>>>>>> in >>>>>>>>> the DB). >>>>>>>>> >>>>>>>>> Any suggestions why "next" argument does't get the job done? >>>>>>>>> >>>>>>>>> UPDATE: >>>>>>>>> If I add "redirect(URL('default', 'index'))" in the IF condition >>>>>>>>> (code above) - all goes fine. What's with the "next" argument then? >>>>>>>>> >>>>>>>>> -- --- 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/groups/opt_out.