- Akku Tests und Balkonkraftwerk Speicher         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 36 von 36

Thema: html code für User Login + password (esp8266 + Arduino IDE)

  1. #31
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Anzeige

    Powerstation Test
    Änderungen:

    Code:
        if ( client.available() ) {
          char c = client.read();
            ....
        }else  stringok = true;
    
    
        if ( stringok && (strlen(strupwd) == strlen(website_upwd)) && (strcmp(website_upwd, strupwd) == 0) )
        {
          authorized = true;
          //debug
          //Serial.print("check: authorized="); Serial.println(authorized);
          readString = "", stringok = false;
          return;
        }
    
    void handleNotAuthorized() {
      ....
      bool  stringok = false;
    Dann funktioniert es. Allerdings wahrscheinlich nur, weil nach dem Password der String auch endet. Sollte nach &upwd=yy noch was stehen wie: &upwd=yy&name=uschi könnte es sein, dass es wieder nicht funktioniert. Das habe ich nicht probiert.
    Geändert von Moppi (19.08.2018 um 17:02 Uhr)

  2. #32
    HaWe
    Gast
    außerhalb von handleNotAuthorized() testen? oder ist da dein Code irgendwie durcheinander?

    Könntest du evtl bitte mal den kompletten Code posten?

    - - - Aktualisiert - - -

    klappt nicht bei mir, oder dein Code ist unvollständig...

  3. #33
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Erst hat es funktioniert, nun wieder nicht. Merkwürdige Sache!

    Fest steht, dass in der Schleife die Variable readString zusammengesetzt wird. Das muss von der Prüfung des Passwortes abgekoppelt werden. Zurzeit läuft das Ding in einer Schleife und macht nach jedem Zeichen den Test, ob das Passwort schon stimmig ist. Das geht nicht. Warum nach mehrfachen Versuchen meine Änderungen auch nichts mehr bringen, zuvor aber schon, ist auch ein Rätsel. Daher kann man das erst mal vergessen. Ich hatte nur Codeschnipsel aufgeführt und die Änderungen in Rot, damit man sieht wo die im Quelltext stehen.

    - - - Aktualisiert - - -

    Dieses Konstrukt:

    Code:
          //read char by request
          if (readString.length() < TOKLEN) {
    
            //store characters to string
            readString += c;
            Serial.println(c);
          }
    müsste erstmal geändert werden in das:

    Code:
          //read char by request
          while (readString.length() < TOKLEN) {
    
            //store characters to string
            readString += c;
            Serial.println(c);
          }
    damit der String komplett gelesen wird.
    Und hier erkennt man das erste Problem, dass sich nämlich das Lesen der Zeichen einzig nach TOKLEN richtet. TOKLEN muss daher zuerst die Länge haben, die das vom Browser übermittelte Passwort eben hat.
    Die Schwierigkeit daran ist, dass die Abarbeitung des gesamten Input-Strings (der vom Browser kommt) Zeichen um Zeichen geschieht, in einer Schleife, wo dann auch auf '\n' geprüft wird und ob das Passwort richtig ist. Und das ist alles ineinander verschachtelt.

  4. #34
    HaWe
    Gast
    hast du denn einen Vorschlag (neuer Code für handleNotAuthorized ), wie es korrekt funktioniert?

    bisher hat der Code (auch deiner oben mit den roten Änderungen) noch nicht funktioniert, bei diesem wurde noch nicht einmal das 100%ig korrekte Passwort akzeptiert...
    Aber wie gesagt, wenn dein Code von dir getestet wurde, dann poste ihn doch bitte einmal vollständig (handleNotAuthorized)!

  5. #35
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    Ich glaub ja:

    Code:
    void handleNotAuthorized() {
      String readString = "";
      char   strinput[MAXLEN], strupwd[TOKLEN], struname[TOKLEN] ;
      
      WiFiClient client = wifiserver.available();
    
      //---------------------------------------
      // debug
      // authorized=true;
    
      strcpy(strinput, "");
      strcpy(strupwd, "");
      strcpy(struname, "");
    
      while ( client.connected() ) {
        if (authorized) return;
    
    
        if ( client.available() ) {
          char c = client.read();
    
          //read char by request
          readString = "";
          while ( (readString.length() < TOKLEN) && (c != '\n') ) {
              readString += c;
              c = client.read();
          }
    
    
        readString.toCharArray(strinput, MAXLEN);
        // cstringarg( char* haystack, char* vname, char* sarg )
        // haystack pattern: &varname=1234abc,  delimiters &, \n, \0, SPACE, EOF
        cstringarg(strinput, "uname", struname);  // uname
        cstringarg(strinput, "upwd", strupwd);   // upwd
    
        // debug
        Serial.print("strupwd     >>>"); Serial.print(strupwd); Serial.println("<<<");
        Serial.print("website_upwd>>>"); Serial.print(website_upwd); Serial.println("<<<");
        Serial.print("readString>>>");Serial.println(readString);
    
    
        if ( (strlen(strupwd) == strlen(website_upwd)) && (strcmp(website_upwd, strupwd) == 0) )
        {
          authorized = true;
          //debug
          //Serial.print("check: authorized="); Serial.println(authorized);
          readString = "";
          return;
        }
    
          
          
          //if HTTP request has ended
          if (c == '\n') {
             client.flush();
    
    
            //now output html data header
    
            String script = "";
    
            script += ("HTTP/1.1 401 Log-In Required");
            script += ("Content-Type: text/html \n");
            script += ("\n");  //  do not forget this one //????
            script += ("<!DOCTYPE html> \n");
            script += ("<html> \n");
            script += ("<head> \n");
    
    
            // utf-8 für "°" Zeichen
            script +=  "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> \n" ;
            script +=  "<title>" ;
            script +=  website_title ;
            script +=  "</title> \n" ;
            script +=  "</head> \n" ;
            script +=  "<body> \n" ;
    
            script += "<h1><p style=\"color:rgb(255,0,191);\"> " + (String)website_url ;
            script += (String)": &nbsp; <wbr> <wbr> " + "Not authorized !</p> </h1> \n" ;
            script += ("<h2><p style=\"color:rgb(255,0,191);\"> log in to proceed: </p> </h2> \n");
    
            script += ("<FORM ACTION='/' method=GET > \n");
            script += ("<h2>user name:  <INPUT TYPE=text NAME='uname' VALUE=''  MAXLENGTH='50'> </h2> \n");
            script += ("<h2>password :  <INPUT TYPE=PASSWORD NAME='upwd' VALUE='' MAXLENGTH='50'> </h2> \n");
    
            script += ("<h2><INPUT TYPE=SUBMIT></h2> \n");
    
            script += ("</FORM> \n");
            script += ("<BR> \n");
            script += ("</body> \n");
            script += ("</html> \n");
    
            client.print(script);
    
            //stopping client
            client.stop();
    
            delay(1);
    
            //clearing string for next read
            //readString = "";
          }
        }
        delay(1);
      }
    }
    Ersetzen tust Du bitte nur die Funktion handleNotAuthorized().

    Zuerst muss der gesamte String vom Browser gelesen werden oder bis TOKLEN erreicht ist. Danach kann man die Parameter mit cstringarg rausfischen und das dann prüfen.
    Vorher war es anders herum: Erst wurde der Parameter für Passwort geprüft und dann ein Zeichen von den gesendeten Browserdaten gelesen, das eine Zeichen wurde angehängt und dann begann der Spaß von vorn.
    Geändert von Moppi (19.08.2018 um 18:49 Uhr)

  6. #36
    HaWe
    Gast
    JAAAAAAA !!
    PERFEKT! WUNDERBAR!
    TAUSEND DANK!

Seite 4 von 4 ErsteErste ... 234

Ähnliche Themen

  1. html-Code für nodeMCU mit Arduino IDE + Wifi libs
    Von HaWe im Forum Arduino -Plattform
    Antworten: 7
    Letzter Beitrag: 14.08.2018, 18:30
  2. Pegelwandler RX/TX Arduino ESP8266
    Von Cysign im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 05.02.2018, 23:29
  3. ESP8266 boards per per Arduino-IDE programmieren?
    Von HaWe im Forum Arduino -Plattform
    Antworten: 27
    Letzter Beitrag: 10.06.2017, 15:19
  4. arduino ide mit esp8266
    Von NotEvil im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 4
    Letzter Beitrag: 12.01.2017, 14:17
  5. HTML-Code (scripts)
    Von Technik =) im Forum Umfragen
    Antworten: 6
    Letzter Beitrag: 10.10.2008, 09:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad