Also make the redirect a subfunc to be reused... On Thu, Aug 20, 2015 at 11:36 AM, Richard Vézina < [email protected]> wrote:
> Ok, will do it... > > Richard > > On Thu, Aug 20, 2015 at 10:53 AM, Anthony <[email protected]> wrote: > >> Well, you need to know what "next" is, so the redirect has to come after >> that. However, there's no reason you couldn't simply refactor the function >> a bit -- just move the whole block where "next" is defined to the very >> beginning of the function (you could also move the onaccept, onvalidation, >> and log definitions earlier) -- that way no unnecessary code will be >> executed. >> >> Anthony >> >> >> On Thursday, August 20, 2015 at 9:54:02 AM UTC-4, Richard wrote: >>> >>> Is doing this that far in the login function a waste of time? I mean, >>> why doing all the form preparation (the validators at the top of the >>> function)... Your code is cleaner since you flush session._auth_next and >>> for this reason you need ot wait next var is defined... >>> >>> But why this : >>> >>> table_user = self.table_user() >>> settings = self.settings >>> if 'username' in table_user.fields or \ >>> not settings.login_email_validate: >>> tmpvalidator = >>> IS_NOT_EMPTY(error_message=self.messages.is_empty) >>> if not settings.username_case_sensitive: >>> tmpvalidator = [IS_LOWER(), tmpvalidator] >>> else: >>> tmpvalidator = >>> IS_EMAIL(error_message=self.messages.invalid_email) >>> if not settings.email_case_sensitive: >>> tmpvalidator = [IS_LOWER(), tmpvalidator] >>> >>> request = current.request >>> response = current.response >>> session = current.session >>> >>> passfield = settings.password_field >>> try: >>> table_user[passfield].requires[-1].min_length = 0 >>> except: >>> pass >>> >>> Comes before exiting the function with the redirect in case user is >>> already connected... >>> >>> The part where request, response, and session get defined is correct to >>> be above, but I would put the rest below the bloc " ### use session >>> for federated login" >>> >>> What do you think? >>> >>> Richard >>> >>> >>> >>> >>> >>> Le mercredi 19 août 2015 17:48:16 UTC-4, Anthony a écrit : >>>> >>>> Maybe right after the "next" variable is set here >>>> <https://github.com/web2py/web2py/blob/master/gluon/tools.py#L2545>, >>>> something like: >>>> >>>> if self.is_logged_in(): >>>> if next == session._auth_next: >>>> del session._auth_next >>>> redirect(next, client_side=settings.client_side) >>>> >>>> Maybe abstract those last three lines into a function, as nearly the >>>> same code is executed in two other places. >>>> >>>> Anthony >>>> >>>> On Wednesday, August 19, 2015 at 2:23:57 PM UTC-4, Richard wrote: >>>>> >>>>> Not sure it required to check if next var is empty or not... If there >>>>> is no next in the url it should log in...: >>>>> >>>>> if self.is_logged_in(): >>>>> if self.get_vars_next() is not None and self.get_vars_next >>>>> () != '': >>>>> redirect(self.get_vars_next()) >>>>> else: >>>>> redirect('default', 'index') >>>>> >>>>> So, maybe this could be rewrite like so : >>>>> >>>>> >>>>> if self.get_vars_next() is not None and self.get_vars_next() != '' >>>>> and self.is_logged_in(): >>>>> redirect(self.get_vars_next()) >>>>> >>>>> Richard >>>>> >>>>> Le mercredi 19 août 2015 14:17:41 UTC-4, Richard a écrit : >>>>>> >>>>>> I had this here and it works... Though, it needs to check if _next >>>>>> var is populated, if not redirect on default/index maybe... >>>>>> >>>>>> What do you think... I am not well versed in security could this >>>>>> create a security hole? >>>>>> >>>>>> def login( >>>>>> self, >>>>>> next=DEFAULT, >>>>>> onvalidation=DEFAULT, >>>>>> onaccept=DEFAULT, >>>>>> log=DEFAULT, >>>>>> ): >>>>>> """ >>>>>> returns a login form >>>>>> >>>>>> method: Auth.login([next=DEFAULT [, onvalidation=DEFAULT >>>>>> [, onaccept=DEFAULT [, log=DEFAULT]]]]) >>>>>> >>>>>> """ >>>>>> *if self.is_logged_in():* >>>>>> * redirect(self.get_vars_next())* >>>>>> >>>>>> table_user = self.table_user() >>>>>> settings = self.settings >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Le mercredi 19 août 2015 14:01:40 UTC-4, Richard a écrit : >>>>>>> >>>>>>> Nop it only cas_login related... >>>>>>> >>>>>>> On Wed, Aug 19, 2015 at 2:00 PM, Richard Vézina < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Is the function that perform the check is : allow_access()?? >>>>>>>> >>>>>>>> On Wed, Aug 19, 2015 at 1:59 PM, Richard Vézina < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> Exactly, I was reading the code figure where the credentials check >>>>>>>>> is perform... >>>>>>>>> >>>>>>>>> I will try to make a PR, if I can find the right place... I will >>>>>>>>> send here before what I come up with if you want to review... >>>>>>>>> >>>>>>>>> Richard >>>>>>>>> >>>>>>>>> On Wed, Aug 19, 2015 at 1:54 PM, Anthony wrote: >>>>>>>>> >>>>>>>>>> On Wednesday, August 19, 2015 at 1:20:49 PM UTC-4, Richard wrote: >>>>>>>>>>> >>>>>>>>>>> Hello, >>>>>>>>>>> >>>>>>>>>>> I often, fall on this annoying issue... I alway leaves multiple >>>>>>>>>>> tabs all accessing my app open... When the browser get restart, all >>>>>>>>>>> this >>>>>>>>>>> tabs get redirected to "user/login?_next=..." URL when I have been >>>>>>>>>>> logged >>>>>>>>>>> out from the system... I found it unpleasant that, if I log in in >>>>>>>>>>> one of >>>>>>>>>>> the tab, I can't just refresh the other tabs... Reload the page >>>>>>>>>>> still >>>>>>>>>>> require me to input my credentials again or that I remove the >>>>>>>>>>> "user/login?_next=" from the URL to avoid log in even if I am >>>>>>>>>>> logged in... >>>>>>>>>>> >>>>>>>>>>> I don't know if we could implement something that would make >>>>>>>>>>> some redirection to the next URL component on page reload and how >>>>>>>>>>> this >>>>>>>>>>> could cause overhead of doing so... But it could make this >>>>>>>>>>> repetitive task >>>>>>>>>>> a memory if it could be implement easilly... >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Maybe early in the Auth.login method, there could be a check to >>>>>>>>>> see if the user is already logged in (i.e., check for the existence >>>>>>>>>> of >>>>>>>>>> self.user) and if there is a _next URL -- in that case, there could >>>>>>>>>> just be >>>>>>>>>> an immediate redirect to the _next URL without bothering with the >>>>>>>>>> login. >>>>>>>>>> That way, if you re-login in one tab and then hit refresh in another >>>>>>>>>> tab, >>>>>>>>>> the other tab will return to its original page. >>>>>>>>>> >>>>>>>>>> Anthony >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Richard >>>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Resources: >>>>>>>>>> - http://web2py.com >>>>>>>>>> - http://web2py.com/book (Documentation) >>>>>>>>>> - http://github.com/web2py/web2py (Source code) >>>>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues) >>>>>>>>>> --- >>>>>>>>>> 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/d/optout. >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> -- >> Resources: >> - http://web2py.com >> - http://web2py.com/book (Documentation) >> - http://github.com/web2py/web2py (Source code) >> - https://code.google.com/p/web2py/issues/list (Report Issues) >> --- >> 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/d/optout. >> > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- 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/d/optout.

