<%IF SESSION.LOGGED_IN无法在dancer2 main.tt中工作

时间:2015-08-10 09:55:27

标签: perl session dancer

我对舞蹈家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>

我有两个问题:

  1. 如果session.logged_in在main.tt中无效。当我没有登录时,它还会显示欢迎空白区域,角色:空白区域。

  2. 当用户名/密码错误时,如何重定向到index.tt页面。在当前代码中,如果其中任何一个错误,浏览器窗口将变为空白。

  3. 感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题在于我使用的是template : "simple"。我将config.yml文件更改为以下内容并且有效:

template: "template_toolkit"
engines:
  template:
    template_toolkit:
      start_tag: '<%'
      end_tag:   '%>'

我将按照建议在将来尝试使用Auth :: Extensible。