On 18 fev, 17:31, Fran <francisb...@googlemail.com> wrote:
> On Feb 18, 6:42 pm, Abner <abner.jacob...@gmail.com> wrote:
>
> >             next = request.vars._next or self.settings.login_next
>
> This is the correct order.
>
> self.settings.login_next is the default location to be redirected to.
> However this can e over-ridden per-page via request.vars._next.
>

Yes, the default approach is very good, but, the problem in my case
is: I'm not set any request.vars._next nor used auth.login(NEXT=...),
the auth.login is generating any form with empty next value - <input
name="_next" type="hidden" value="" />  - see this code from
auth.login:

    def login(
        self,
        next=DEFAULT,
        onvalidation=DEFAULT,
        onaccept=DEFAULT,
        log=DEFAULT,
        ):
...
        if not request.vars._next:
            request.vars._next = request.env.http_referer or ''
        if next == DEFAULT:
            next = request.vars._next or self.settings.login_next

If I undestand correct the logic is: if request.vars._next empty then
request.env.http_refere is set to it or '' if request.env.http_refere
not exists. In the next line if next is not set in the function call
then set next = request.vars._next. With this logic my default
settings, self.settings.login_next, never goes to next because
request.vars._next is = request.env.http_referer or = ''.

Also in the code of auth.login you can see:

form = SQLFORM(
            user,
            fields=[username, 'password'],
            hidden=dict(_next=request.vars._next),
            showid=self.settings.showid,
            submit_button=self.settings.submit_button,
            delete_label=self.settings.delete_label,
            )

And this generate <input name="_next" type="hidden" value="" /> not
the value I set on self.settings.login_next. I think that this logic
is more correct:

In the _init_ of the auth class change:

self.settings.login_next = URL(r=request, f='index')

to

self.settings.login_next = None

then in login function:

        if not request.vars._next:
            request.vars._next = request.env.http_referer or ''
        if next == DEFAULT:
            if self.settings.login_next == None:
                next = request.vars._next
            else:
                next = self.settings.login_next

With this if auth.login is called without NEXT and without
self.settings.login_next then request.vars._nex is used. What you
think about this ?

With the actual code/login self.settings.login_next never goes to be
used.


> This allows any page which requests a login to get the logged-in user
> to return to *that* page.
> - functionality which I greatly appreciate :)
>
> F
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to