73.8.5. Přihlašování

Jeden z úkolů který potřebujeme často řešit je přihlašování do webu. Přihlašování jsem zatím řešil na jednoduchém principu. Ten spočívá v kontrole uživatelského jména v sezení (session). Není-li v sezení definováno uživatelské jméno (username), přesměruji klienta na přihlašovací stránku login.kl1.

Ve stránce která je chráněna uvedu tedy následující od kontrolující přítomnost uživatelského jména v session.

<%

/* Check if user is logged in.  Redirect to login if otherwise. */
username = session_get(session, "username");
if (!username) {
	response_redirect(response, "login.kl1");
}

%>

Stránka pro zadávání jména a hesla je v souboru login.kl1.

<%!
/*  
 * Přihlašovací formulář.
 */

static char *username = NULL;
static char *password = NULL;

%><%
/* get list of arguments */
vars_t *args = request_get_args(request);
username = vars_get_value(args, "username");
%>
<html>
  <head>
    <title>Login</title>
    <link rel="stylesheet" href="kl.css" type="text/css" />
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  </head>

  <body>
    <h1>Login</h1>
    <%

switch (vars_get_value_i(args, "action")) 
{
case 1:
	username = vars_get_value(args, "username");
	password = vars_get_value(args, "password");
	
	if (username && strlen(username) && password && strlen(password)) {
		/* authenticate here */
		session_set(session, "username", username);
		response_redirect(response, "/index.kl1");

		io_printf(out, "Do something with (username, password):" \
			       " (%s,%s)", username, password);
	} else {
		io_printf(out, "Bad (username, passwprd)");	
	}
}
%>

    <form action="<%= SCRIPT_NAME %>" method="post">
      <table rules="all" border="1">
        <tr>
          <th>username:</th>
          <td><input type="text" name="username"/></td>
        </tr>
        <tr>
          <th>password:</th>
          <td><input type="password" name="password"/></td>
        </tr>
        <tr>
          <td colspan="2"><input type="submit" value="login"/></td>
        </tr>
      </table>
      <input type="hidden" value="1" name="action"/>
    </form>

  </body>
</html>

To be done: