Re: [Catalyst] upon successful login, how do i get redirect users back to the page they wanted to access previously?
On Sun, Apr 19, 2009 at 07:06:14AM +0900, J. Shirley wrote: On Sat, Apr 18, 2009 at 10:19 PM, kakim...@tpg.com.au wrote: I tried using FLASH and yet it doesn't work for me. The value I set in the flash gets lost after a redirect. Sorry to ask but does flash really work and is it reliable? I know setting stuff in the session variable is definitely reliable. That was a really silly question. Does X really work is basically saying are the developers idiots?. If it didn't work, we'd have a failing test case and be trying to write a patch or it'd go into the docs. Of course, flash by its nature isn't always safe under e.g. multiple tab situations etc. but that's down to -what- it is, not the implementation. 1) I access www.lginsurance.com.au/subscriptions/add 2) Since I am not logged in, Root-auto() kicks in and calls Login-index() Ok, so at this point you haven't changed the URL at all. Why bother changing it? What I usually do is $c-forward to my login action, which tests for __login_user and __login_pass fields and if present, tries to login. If that works, it just returns and the request goes on as normal. If not, it sets up the login form and does $c-detach. For bonus points you can save the POST params (if any) and the HTTP method (if not POST) into the login form so you can provide the exact same environment - you can't redirect to a POSt request but you -can- allow one to continue ... -- Matt S Trout Need help with your Catalyst or DBIx::Class project? Technical Directorhttp://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://chainsawblues.vox.com/http://www.shadowcat.co.uk/servers/ ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] upon successful login, how do i get redirect users back to the page they wanted to access previously?
On Sat, Apr 18, 2009 at 2:34 AM, kakim...@tpg.com.au wrote: hi, everybody, [snip] upon successful login, how do i get redirect users back to the page they wanted to access previously (which is www.lginsurance.com.au/subcriptions/add)? At the moment, upon successful login, menu.tt2 will be called. At work we do this with http://tr.im/j75v . If an action requires the user to be authenticated, they call $c-forward('/user/login'). If they are logged in, that action returns immediately and the action can continue. Otherwise, the current URI is stored in session, and the login form is presented. Then, when the login is successful, the URI is restored, and the user is redirect. However... after seeing Devin's approach, which is essentially the same but without the session, I may change to that. I believe the two approaches are essentially the same though. -- Oliver Charles / aCiD2 ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] upon successful login, how do i get redirect users back to the page they wanted to access previously?
Hello, everyone! thank you for your recommendations. I have looked at the http://dev.catalystframework.org/wiki/wikicookbook/nextpageredirect link and http://search.cpan.org/~hkclark/Catalyst-Manual-5.7020/lib/Catalyst/Manual/Tutorial/Authentication.pod. Here's an extract, As discussed in the previous chapter of the tutorial, flash allows you to set variables in a way that is very similar to stash, but it will remain set across multiple requests. Once the value is read, it is cleared (unless reset).. I tried using FLASH and yet it doesn't work for me. The value I set in the flash gets lost after a redirect. Sorry to ask but does flash really work and is it reliable? I know setting stuff in the session variable is definitely reliable. Here are some extracts. 1) I access www.lginsurance.com.au/subscriptions/add 2) Since I am not logged in, Root-auto() kicks in and calls Login-index() 3) The path which I am requesting for (being '/subscriptions/add') gets stored in the flash, $c-flash-{'requested_page'} 4) Looking at the debugging messages printed from Login.pm-, the $c-flash-{'requested_page'} is empty (ie lost!) 5) The login form appears in my web browser and I log in. 6) All good in that I have authenticated myself but the page that loads is the main menu (instead of the page I previously wanted which is www.lginsurance.com.au/subscriptions/add). Does flash really work or should I just use the session variable? Root.pm (start) -- sub auto : Private { my ($self, $c) = @_; $c-log-debug( Root.pm - auto and path is . $c-req-path() ); if ($c-controller eq $c-controller('Login')) { $c-log-debug( Root.pm - auto - asked for login path); return 1; } else{ if ($c-user_exists()) { my $requested_page = $c-flash-{'requested_page'}; $c-log-debug( Root.pm - auto - USER's logged in. Proceed.($requested_page)); if ( $requested_page ) { $c-log-debug( Root.pm - auto - Requested Path is getting redirected to.); $c-response-redirect( $requested_page ); $c-log-debug( Root.pm - auto - BACK FROM REDIRECTION... ); } return 1; } else { $c-log-debug( Root.pm - auto - USER's not logged in. Forcing login and setting 'requested_page' = . $c-req-pat h() ); $c-flash-{'requested_page'} = $c-req-path(); $c-log-debug( Root.pm - auto - USER's not logged in. RECHECKING THE 'requested_page' = . $c-req-path() ); $c-response-redirect($c-uri_for('/login')); return 0; } } Root.pm (end ) -- Login.pm (start ) -- sub index : Private { my ($self, $c) = @_; $c-log-debug( in login .pm ); my $requested_page = $c-flash-{'requested_page'}; $c-log-debug( Login.pm - index- the path for requested_page is .($requested_page)); # Get the username and password from form my $username = $c-request-params-{username} || ''; my $password = $c-request-params-{password} || ''; # If the username and password values were found in form if ($username $password) { # Attempt to log the user in if ($c-login($username, $password)) { $c-log-debug( Login.pm [authenticated current user] - index... ); # If successful, then let them use the application $c-response-redirect( $c-uri_for('/') ); return 1; } else { # Set an error message $c-stash-{error_msg} = Bad username or password.; } } # If either of above don't work out, send to the login page $c-stash-{template} = 'login.tt2'; return 1; } Login.pm (end ) -- Quoting Oliver Charles oliver.g.char...@googlemail.com: On Sat, Apr 18, 2009 at 2:34 AM, kakim...@tpg.com.au wrote: hi, everybody, [snip] upon successful login, how do i get redirect users back to the page they wanted to access previously (which is www.lginsurance.com.au/subcriptions/add)? At the moment, upon successful login, menu.tt2 will be called. At work we do this with http://tr.im/j75v . If an action requires the user to be authenticated, they call $c-forward('/user/login'). If they are logged in, that action returns immediately and the action can continue. Otherwise, the current URI is stored in session, and the login form is presented. Then, when the login is successful, the URI is restored, and the user is redirect. However... after seeing Devin's approach, which is essentially the same but without the session, I may change to that. I believe the
Re: [Catalyst] upon successful login, how do i get redirect users back to the page they wanted to access previously?
Hello, everyone! I just implemented the change by storing the value of the path that I wish to access into the session. It works:) Nevertheless, I would still like to find out about your thoughts on flash. Thank you K. akimoto Quoting kakim...@tpg.com.au: Hello, everyone! thank you for your recommendations. I have looked at the http://dev.catalystframework.org/wiki/wikicookbook/nextpageredirect link and http://search.cpan.org/~hkclark/Catalyst-Manual-5.7020/lib/Catalyst/Manual/Tutorial/Authentication.pod. Here's an extract, As discussed in the previous chapter of the tutorial, flash allows you to set variables in a way that is very similar to stash, but it will remain set across multiple requests. Once the value is read, it is cleared (unless reset).. I tried using FLASH and yet it doesn't work for me. The value I set in the flash gets lost after a redirect. Sorry to ask but does flash really work and is it reliable? I know setting stuff in the session variable is definitely reliable. Here are some extracts. 1) I access www.lginsurance.com.au/subscriptions/add 2) Since I am not logged in, Root-auto() kicks in and calls Login-index() 3) The path which I am requesting for (being '/subscriptions/add') gets stored in the flash, $c-flash-{'requested_page'} 4) Looking at the debugging messages printed from Login.pm-, the $c-flash-{'requested_page'} is empty (ie lost!) 5) The login form appears in my web browser and I log in. 6) All good in that I have authenticated myself but the page that loads is the main menu (instead of the page I previously wanted which is www.lginsurance.com.au/subscriptions/add). Does flash really work or should I just use the session variable? Root.pm (start) -- sub auto : Private { my ($self, $c) = @_; $c-log-debug( Root.pm - auto and path is . $c-req-path() ); if ($c-controller eq $c-controller('Login')) { $c-log-debug( Root.pm - auto - asked for login path); return 1; } else{ if ($c-user_exists()) { my $requested_page = $c-flash-{'requested_page'}; $c-log-debug( Root.pm - auto - USER's logged in. Proceed.($requested_page)); if ( $requested_page ) { $c-log-debug( Root.pm - auto - Requested Path is getting redirected to.); $c-response-redirect( $requested_page ); $c-log-debug( Root.pm - auto - BACK FROM REDIRECTION... ); } return 1; } else { $c-log-debug( Root.pm - auto - USER's not logged in. Forcing login and setting 'requested_page' = . $c-req-pat h() ); $c-flash-{'requested_page'} = $c-req-path(); $c-log-debug( Root.pm - auto - USER's not logged in. RECHECKING THE 'requested_page' = . $c-req-path() ); $c-response-redirect($c-uri_for('/login')); return 0; } } Root.pm (end ) -- Login.pm (start ) -- sub index : Private { my ($self, $c) = @_; $c-log-debug( in login .pm ); my $requested_page = $c-flash-{'requested_page'}; $c-log-debug( Login.pm - index- the path for requested_page is .($requested_page)); # Get the username and password from form my $username = $c-request-params-{username} || ''; my $password = $c-request-params-{password} || ''; # If the username and password values were found in form if ($username $password) { # Attempt to log the user in if ($c-login($username, $password)) { $c-log-debug( Login.pm [authenticated current user] - index... ); # If successful, then let them use the application $c-response-redirect( $c-uri_for('/') ); return 1; } else { # Set an error message $c-stash-{error_msg} = Bad username or password.; } } # If either of above don't work out, send to the login page $c-stash-{template} = 'login.tt2'; return 1; } Login.pm (end ) -- Quoting Oliver Charles oliver.g.char...@googlemail.com: On Sat, Apr 18, 2009 at 2:34 AM, kakim...@tpg.com.au wrote: hi, everybody, [snip] upon successful login, how do i get redirect users back to the page they wanted to access previously (which is www.lginsurance.com.au/subcriptions/add)? At the moment, upon successful login, menu.tt2 will be called. At work we do this with http://tr.im/j75v . If an action requires the user to be authenticated,
Re: [Catalyst] upon successful login, how do i get redirect users back to the page they wanted to access previously?
On Sat, Apr 18, 2009 at 10:19 PM, kakim...@tpg.com.au wrote: Hello, everyone! thank you for your recommendations. I have looked at the http://dev.catalystframework.org/wiki/wikicookbook/nextpageredirect link and http://search.cpan.org/~hkclark/Catalyst-Manual-5.7020/lib/Catalyst/Manual/Tutorial/Authentication.podhttp://search.cpan.org/%7Ehkclark/Catalyst-Manual-5.7020/lib/Catalyst/Manual/Tutorial/Authentication.pod . Here's an extract, As discussed in the previous chapter of the tutorial, flash allows you to set variables in a way that is very similar to stash, but it will remain set across multiple requests. Once the value is read, it is cleared (unless reset).. I tried using FLASH and yet it doesn't work for me. The value I set in the flash gets lost after a redirect. Sorry to ask but does flash really work and is it reliable? I know setting stuff in the session variable is definitely reliable. Here are some extracts. 1) I access www.lginsurance.com.au/subscriptions/add 2) Since I am not logged in, Root-auto() kicks in and calls Login-index() 3) The path which I am requesting for (being '/subscriptions/add') gets stored in the flash, $c-flash-{'requested_page'} 4) Looking at the debugging messages printed from Login.pm-, the $c-flash-{'requested_page'} is empty (ie lost!) 5) The login form appears in my web browser and I log in. 6) All good in that I have authenticated myself but the page that loads is the main menu (instead of the page I previously wanted which is www.lginsurance.com.au/subscriptions/add). Does flash really work or should I just use the session variable? Root.pm (start) -- sub auto : Private { my ($self, $c) = @_; $c-log-debug( Root.pm - auto and path is . $c-req-path() ); if ($c-controller eq $c-controller('Login')) { $c-log-debug( Root.pm - auto - asked for login path); return 1; } else{ if ($c-user_exists()) { my $requested_page = $c-flash-{'requested_page'}; $c-log-debug( Root.pm - auto - USER's logged in. Proceed.($requested_page)); if ( $requested_page ) { $c-log-debug( Root.pm - auto - Requested Path is getting redirected to.); $c-response-redirect( $requested_page ); $c-log-debug( Root.pm - auto - BACK FROM REDIRECTION... ); } return 1; } else { $c-log-debug( Root.pm - auto - USER's not logged in. Forcing login and setting 'requested_page' = . $c-req-pat h() ); $c-flash-{'requested_page'} = $c-req-path(); $c-log-debug( Root.pm - auto - USER's not logged in. RECHECKING THE 'requested_page' = . $c-req-path() ); $c-response-redirect($c-uri_for('/login')); return 0; } } Root.pm (end ) -- Login.pm (start ) -- sub index : Private { my ($self, $c) = @_; $c-log-debug( in login .pm ); my $requested_page = $c-flash-{'requested_page'}; $c-log-debug( Login.pm - index- the path for requested_page is .($requested_page)); # Get the username and password from form my $username = $c-request-params-{username} || ''; my $password = $c-request-params-{password} || ''; # If the username and password values were found in form if ($username $password) { # Attempt to log the user in if ($c-login($username, $password)) { $c-log-debug( Login.pm [authenticated current user] - index... ); # If successful, then let them use the application $c-response-redirect( $c-uri_for('/') ); return 1; } else { # Set an error message $c-stash-{error_msg} = Bad username or password.; } } # If either of above don't work out, send to the login page $c-stash-{template} = 'login.tt2'; return 1; } Login.pm (end ) -- Quoting Oliver Charles oliver.g.char...@googlemail.com: On Sat, Apr 18, 2009 at 2:34 AM, kakim...@tpg.com.au wrote: hi, everybody, [snip] upon successful login, how do i get redirect users back to the page they wanted to access previously (which is www.lginsurance.com.au/subcriptions/add)? At the moment, upon successful login, menu.tt2 will be called. At work we do this with http://tr.im/j75v . If an action requires the user to be authenticated, they call $c-forward('/user/login'). If they are logged in, that action returns immediately and the action can continue. Otherwise, the current URI is stored in session, and the login form is presented. Then, when the login is successful, the URI
Re: [Catalyst] upon successful login, how do i get redirect users back to the page they wanted to access previously?
here's one way to do it: http://dev.catalystframework.org/wiki/wikicookbook/nextpageredirect On Fri, Apr 17, 2009 at 7:34 PM, kakim...@tpg.com.au wrote: hi, everybody, Take this scenario: a user who has yet to login tries to access a path that is only for logged in users. Assume it is www.lginsurance.com.au/subcriptions/add. Hence, in my index.tt2, upon displaying a message indicating that the current user has yet to log in, I also display the log in form. - extract from index.tt2 - starts -- [% IF Catalyst.user_exists %] [% PROCESS menu.tt2 %] [% ELSE %] User has not logged in. [% PROCESS login.tt2 %] [% END %] - extract from index.tt2 - ends -- upon successful login, how do i get redirect users back to the page they wanted to access previously (which is www.lginsurance.com.au/subcriptions/add)? At the moment, upon successful login, menu.tt2 will be called. Thank you. K. akimoto ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/ -- Devin Austin http://www.codedright.net http://www.dreamhost.com/r.cgi?326568/hosting.html - Host with DreamHost! ___ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/