I think this actually is a bug. I haven't looked at it more, but I changed 
my default controller/function to home/index
When I login (regular login except for the following lines in my model) it 
returns me to default/index (my old controller still exists there until I 
finished refactoring the code).

def get_last_opened(form):
    if auth.has_membership(auth.user.last_opened):
        session.table_token = auth.user.last_opened
    else:
        redirect(URL('error','index'))

auth.settings.login_onaccept = get_last_opened

If I have more time next week and the issue is not solved, I'll take a 
better look at it.

On Thursday, March 22, 2012 3:33:30 PM UTC+2, Anthony wrote:
>
> > I believe auth.settings.login_next only has an effect when there is no 
>> > session._auth_next (i.e., when the user goes directly to the login URL 
>> > rather than getting there via an internal link or redirect). 
>>
>> Your logic is sound, but I'm afraid this is not the case. I am 
>> directly going to myapp/login and then getting redirected via 
>> session._auth_next to default/index. 
>>
>
> Puzzling. Could be a bug.
>  
>
>> I thought this is what the auth.settings.login_onaccept = [myonaccept] 
>> was supposed to do (see my example stated earlier). That was my first 
>> attempt as it seemed the most logical. Am I doing something wrong 
>> there?
>>
>
> auth.settings.login_onaccept gets called after a successful login, but 
> it's not the very last thing that happens in auth.login() -- after the 
> callback, auth.login() still proceeds to do its usual redirect. The 
> redirect starts a whole new request, so if you set response.js before the 
> redirect, it will get lost. Here's why -- when you set response.js, it adds 
> the JS code to a special web2py-component-command header. However, because 
> of the redirect, that header will arrive at the browser as part of a 303 
> redirect response. When the browser receives a redirect response, it 
> immediately issues the redirect request without further processing the XHR 
> object, so the client-side web2py JS code never gets to process the 
> web2py-component-command header. Instead, you have to set response.js 
> *after* the redirect, or simply prevent the redirect altogether (hence my 
> suggestion to have your callback raise an HTTP() response).
>
> Anthony
>

Reply via email to