Avatar billede straszek Praktikant
04. august 2004 - 12:45 Der er 2 kommentarer og
2 løsninger

Hjælp til tilpasning af login system

JEg har fundet et lille logind system som en bruger her på eksperten har lavet.

Er der nogen der kan hjælpe mig med at tilpasse sciptet til at tjekke brugere op mod en database? - Jeg kan ikke rigtigt gennemskue hvor og hvordan jeg skal indsætte db kaldet



Scriptet:
<?php
/**
  * Simpleauth loginsystem v.1.0 [1.jul.2004]
  * af troels@kyberfabrikken.dk
  *
  * Copyright 2004, troels knak-nielsen
  * Dette script er licenseret under public domain
  *
  * @Usage
  *
  * Du bruger simpleauth ved at inkludere dette script i toppen af dine sider
  * For at beskytte en side (kræve at brugeren logger ind), kalder du blot funktionen
  * authenticate_user();
  *
  * Scriptet kan konfigureres til at køre i to forskellige "modes" - SESSION eller SERVER.
  * Hvis du bruger SESSION mode, så SKAL DU KALDE session_start() i toppen af ALLE DINE SIDER.
  * Og dette skal gøres INDEN DU BRUGER authenticate_user()
  *
  * Eksempel 1. Brug af simpleauth i SESSION mode
  * <code>
  * <?php
  *  require_once('simpleauth.php');
  *  session_start();
  *  authenticate_user();
  *  // Beskyttet kode herunder
  * ?>
  * </code>
  *
  * Eksempel 2. Brug af simpleauth i SERVER mode
  * <code>
  * <?php
  *  require_once('simpleauth.php');
  *  authenticate_user();
  *  // Beskyttet kode herunder
  * ?>
  * </code>
  *
  */

  /**
    * Konfiguration
    *
    * Her konfigurerer vi auth systemet til hvordan den skal bede om login.
    * Du kan sætte AUTHENTICATE_MODE til enten SERVER eller SESSION
    * Hvis du bruger SESSION skal du huske at kalde session_start() inden du kalder authenticate_user()
    * Hvis du vil bruge SERVER skal din webserver være en apache og være konfigureret
    * korrekt. (99% af alle servere passer på dette)
    */
// define('AUTHENTICATE_MODE', 'SERVER');
define('AUTHENTICATE_MODE', 'SESSION');


  /**
    * Denne funktion checker om en bruger findes, og om password for denne er korrekt.
    * Du kan erstatte funktionen med noget kode, der tester imod hvor nu end du har
    * dine brugerdata liggende, så som en database etc.
    *
    * @returns boolean Sand hvis bruger+pass er korrekt
    *
    */
  function validate_user($user, $password)
  {
 
 
    return ($user == "admin") && ($password == "secret");
  }

  function prompt_login()
  {
      if (AUTHENTICATE_MODE == 'SESSION') {
        echo "<html>";
        echo "<head></head>";
        echo "<body>";
        echo "<h1>LOG IN</h1>";
        echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>";
        echo "<b>user : </b><input type='text' name='MY_AUTH_USER' value='" . (isset($_SESSION['MY_AUTH_USER']) ? $_SESSION['MY_AUTH_USER'] : '') . "' /><br />";
        echo "<b>pass : </b><input type='password' name='MY_AUTH_PW' /><br />";
        echo "<input type='submit' />";
        echo "</form>";
        echo "</body>";
        echo "</html>";
        exit;
      }
      if (AUTHENTICATE_MODE == 'SERVER') {
        header('WWW-Authenticate: Basic realm="restricted"');
        header('HTTP/1.0 401 Unauthorized');
        echo "HTTP/1.0 401 Unauthorized";
        exit;
      }
      trigger_error("AUTHENTICATE_MODE has not been set. Valid values are SESSION, SERVER", E_USER_ERROR);
  }

  /**
    * Denne funktion checker, om en bruger er logget ind.
    *
    * @param $must_validate sæt til true, hvis brugeren skal være logget ind for at få adgang,
    *                      eller til false, hvis alle har adgang.
    */
  function authenticate_user($must_validate=true)
  {
    if (isset($_POST['MY_AUTH_USER']) && isset($_POST['MY_AUTH_PW'])) {
      if (function_exists('session_regenerate_id')) {
        session_regenerate_id();
      }
      $_SESSION['MY_AUTH_USER'] = $_POST['MY_AUTH_USER'];
      $_SESSION['MY_AUTH_PW'] = $_POST['MY_AUTH_PW'];
      header("Location: " . $_SERVER['PHP_SELF']);
      exit;
    }
    $is_logged_in = false;
    if (isset($_SERVER['PHP_AUTH_USER']) && !isset($_SESSION['MY_AUTH_USER'])) {
      $GLOBALS['MY_AUTH_USER'] = $_SERVER['PHP_AUTH_USER'];
      $GLOBALS['MY_AUTH_PW'] = $_SERVER['PHP_AUTH_PW'];
    } else if (isset($_SESSION['MY_AUTH_USER']) && isset($_SESSION['MY_AUTH_PW'])) {
      $GLOBALS['MY_AUTH_USER'] = $_SESSION['MY_AUTH_USER'];
      $GLOBALS['MY_AUTH_PW'] = $_SESSION['MY_AUTH_PW'];
    }
    if (isset($GLOBALS['MY_AUTH_USER'])) {
      $is_logged_in = validate_user($GLOBALS['MY_AUTH_USER'], $GLOBALS['MY_AUTH_PW']);
    }
    if ($must_validate && !$is_logged_in) {
        prompt_login();
    }
  }
?>
Avatar billede bhn.314 Nybegynder
04. august 2004 - 13:29 #1
Funktionen "validate_user" skal se sådan ud  - du skal bare lige tilpasse hvilken database og hvilken tabel den skal kigge på.

function validate_user($user, $password)
{
  $link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
            or die("Could not connect : " . mysql_error());

  $query = "SELECT * FROM enTable WHERE username='".$user."' AND password='".$password."'";
  $result = mysql_query($query)
        or die("Query failed : " . mysql_error());

  if(mysql_num_rows($result)==1)
  {
      return true;
  }
  else
  {
      return false;
  }
}
Avatar billede straszek Praktikant
04. august 2004 - 13:46 #2
Det ser ud til at virker. Kan du gennemskue hvordan man får scriptet til at skrive en besked ved forkert login?

Søren
Avatar billede bhn.314 Nybegynder
04. august 2004 - 13:47 #3
function validate_user($user, $password)
{
  $link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
            or die("Could not connect : " . mysql_error());

  $query = "SELECT * FROM enTable WHERE username='".$user."' AND password='".$password."'";
  $result = mysql_query($query)
        or die("Query failed : " . mysql_error());

  if(mysql_num_rows($result)==1)
  {
      return true;
  }
  else
  {
      echo "<script>alert('Forkert password/brugernavn');</script>"
      return false;
  }
}
Avatar billede bhn.314 Nybegynder
05. august 2004 - 23:01 #4
Hvad med nogle point til mig ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester