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.

