我对舞蹈家perl完全陌生。有一些j2ee / dot网络开发经验。 下面是我的登录子程序和main.tt主模板,用于显示登录用户的名称和角色。
子程序:
post '/login' => sub {
my $err;
my $next_home;
my $full_name;
my $pwd;
my $role;
my $given_uid=params->{'username'};
my $given_pwd=params->{'password'};
my $db_con = DBI->connect('<db_connection_string>')
or die $DBI::errstr;
my $sql = "<qwery to fetch user details>";
my $rs = $db_con->prepare($sql) or die $db_con->errstr;
$rs->execute or die $rs->errstr;
my @row = $rs->fetchrow_array;
if ( $#row lt 1 ) {
$err="Invalid Username";
$next_home="index.tt";
}
else {
$full_name=$row[0];
$pwd=$row[1];
$role=$row[2];
if ( $given_pwd ne $pwd ) {
$err = "Invalid Password";
$next_home="index.tt";
}
else {
session 'logged_in' => true;
$err = 'Logged in Successfully';
if ( $role eq 'DEVELOPER') {
$next_home="developer_home.tt";
}
elsif ( $role eq 'ADMIN' ) {
$next_home="admin_home.tt";
}
elsif ( $role eq 'DEPLOYER' ) {
$next_home="deployer_home.tt";
}
elsif ( $role eq 'APPROVER' ) {
$next_home="approver_home.tt";
}
else {
$err = "Invalid Role";
$next_home="index.tt";
}
}
session user_logged_in => $full_name;
session role_of_user_logged_in => $role;
template "$next_home" , {
'NAME' => $full_name,
'ROLE' => $role,
}
}
};
main.tt:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html; charset=<% settings.charset %>" />
<title>MYFIRSTDANCE2</title>
</head>
<body>
<div id="banner" style="min-width:100%; background-image:url(<% request.uri_base %>/images/header.jpg);">
<h1 style="color:white"><center> -:DEPLOY EVERYTHING WITH EASE:- </center></h1>
<% IF session.logged_in %>
<h3>Welcome <% session.user_logged_in %> ,</h3>
<h3>Role: <% session.role_of_user_logged_in %></h3>
<% END %>
<h3>
<hr>
<br>
</div>
<div id="main">
<% content %>
</div>
<div id="footer">
</div>
</body>
</html>
我有两个问题:
如果session.logged_in在main.tt中无效。当我没有登录时,它还会显示欢迎空白区域,角色:空白区域。
当用户名/密码错误时,如何重定向到index.tt页面。在当前代码中,如果其中任何一个错误,浏览器窗口将变为空白。
感谢任何帮助。
答案 0 :(得分:0)
问题在于我使用的是template : "simple"
。我将config.yml文件更改为以下内容并且有效:
template: "template_toolkit"
engines:
template:
template_toolkit:
start_tag: '<%'
end_tag: '%>'
我将按照建议在将来尝试使用Auth :: Extensible。