I think you actually want:

auth.settings.on_failed_authentication = fff

Note, authentication rather than authorization. I believe 
on_failed_authentication will be called before any redirect to the login 
page, and on_failed_authorization gets called after login if the condition 
for authorization fails.

Anthony

On Wednesday, October 19, 2011 11:31:25 AM UTC-4, d wrote:
>
> Thanks Anthony, 
>
> After change to 
>
> auth.settings.on_failed_authorization = fff 
>
> for controller which requires log in and if user not logged in, it 
> redirect to log in page. But purpose of using fff function is to raise 
> http error but not redirecting to log in page. 
>
>
> def fff(): 
>     raise HTTP(403, "Http 403, Login failed or Not logged in") 
>
> auth.settings.on_failed_authorization = fff 
>
>
> so, any idea where is problem? is it because fff() function is not 
> right? 
>
> Thanks a lot. 
>
>
> On Oct 19, 10:36 am, Anthony <[email protected]> wrote: 
> > You should do: 
> > 
> > auth.settings.on_failed_authorization = fff 
> > 
> > You were calling the function fff() instead of assigning it to 
> > on_failed_authorization. Auth will call the function itself at the 
> > appropriate time. 
> > 
> > Anthony 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > On Wednesday, October 19, 2011 10:21:18 AM UTC-4, d wrote: 
> > 
> > > Hi All, 
> > 
> > > I am newbie in web2py, and currently work on web service of model 
> > > part, say if user is logged in, then then can see the data, otherwise 
> > > I want to raise http 403 error but not redirect user to log in page. 
> > > Right now seems redirect user to log in page is default option. 
> > 
> > > I tried but failed, here is what I tried: 
> > 
> > > 1. In Models, db.py 
> > 
> > > add 
> > 
> > > def fff(): 
> > >     raise HTTP(403, "Http 403, Login failed or Not logged in") 
> > 
> > > auth.settings.on_failed_authorization = fff() 
> > 
> > > So, I want to tell web2py if on failed authorization, call function 
> > > fff(), which will raise http 403 error 
> > 
> > > 2. In controller, 
> > > say a.py 
> > 
> > > in a function 
> > 
> > > @auth.requires_login() 
> > > def aaa(): 
> > >     ........ 
> > 
> > > so it says function aaa required logged in, and if not logged in, it 
> > > should see auth.settings.on_failed_authorization = fff() in db.py 
> > 
> > > but somehow it did not works, because for all the controller and 
> > > normal view, it always display this http 403 error, I dont know where 
> > > is the problem, can someone help me, thanks a lot!

Reply via email to