jaffinito34 has asked for the wisdom of the Perl Monks concerning the following question:
I am running a login script and perhaps there is a better way to do this but I think I have it right. Here's how the program should run
fetch cookies check if authorized if yes, redirect if no, check for params if param check for credentials if credentials are good set authorized cookie redirect to default page else authorization failed display form to login
I feel this should work but I need to rerun the 'if param' if statement with the newly entered credentials to get this to work. Here is my code if its easier to look at that.
use DBI; use CGI qw /:standard/; use CGI::Cookie; use warnings; my %cookies = CGI::Cookie->fetch; if (defined $cookies{'authorized'}){ #redirect to search.cgi print redirect("search.cgi"); } if (param){ my $username = param('username'); my $password = param('password'); my $dbh = DBI->connect("dbi:SQLite:dbname=/var/tmp/database.db +","",""); my $sth = $dbh->prepare("select * from users where username = ? and password = ?"); $sth->execute($username, $password); my @row = $sth->fetch_array; if (@row){ #login successful # set 'authorized' cookie my $cookie = CGI::Cookie->new( -name=>'authorized', -value=>1, -path=>'/~default/chinook'); #-expires=>'+10m'); #redirect to search.cgi print redirect(-uri=>'search.cgi', -cookie=>$cookie); }else{ # login failed } } print header, start_html('Login'),h1('Login'), start_form, "Username: ",textfield('username'),br, "Password: ",password_field('password'),br, submit('Enter'), end_form, "\n";
Any ideas how to rerun the if(param) statement?
Maybe a subroutine?
use DBI; use CGI qw /:standard/; use CGI::Cookie; use warnings; #print header('text/plain'); my %cookies = CGI::Cookie->fetch; if (! defined $cookies{'authorized'}) { if (param) { my $username = param('username'); my $password = param('password'); my $dbh = DBI->connect("dbi:SQLite:dbname=/path/to/dat +abase.db","",""); my $sth = $dbh->prepare("select * from users where username = ? and password = ?" +); $sth->execute($username,$password); my @row = $sth->fetchrow_array; if (@row) { #login successful, set authorized cookie my $cookie = CGI::Cookie->new( -name=>'authorized', -value=>1, -path=>'/default/path'); #-expires=>'+10m'); print redirect(-uri=>'search.cgi',-cookie=>$co +okie); } else { &print_login; exit; } } else { &print_login; exit; } } print redirect('search.cgi'); exit; sub print_login { print header, start_html('Login'),h1('Login'), start_form, "Username: ",textfield('username'),br, "Password: ",password_field('password'),br, submit('Enter'), end_form, end_html; exit; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: possible to repeat if statement?
by davido (Cardinal) on May 04, 2013 at 16:26 UTC | |
by Anonymous Monk on May 07, 2013 at 12:01 UTC | |
by Anonymous Monk on May 07, 2013 at 22:57 UTC | |
|
Re: possible to repeat if statement?
by NetWallah (Canon) on May 04, 2013 at 16:31 UTC | |
|
Re: possible to repeat if statement?
by locked_user sundialsvc4 (Abbot) on May 04, 2013 at 16:22 UTC |