Register/Loginproblem - Dcmd,Dini (=> Passworthash)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo, ich habe versucht ein Register/Loginsystem in Dini zu erstellen, allerdings wird entweder das PW nicht gespeichert oder es gibt Fehler im Script. Hier gibt es Fehler:



    //oben
    new pw[128];
    new logged[MAX_PLAYERS];


    dcmd_register(playerid, params[])
    {
    new data[64];
    format(data,sizeof(data),"/user/%s.ini",name[playerid]);
    if (!strlen(params)) return SendClientMessage(playerid,WHITE,"Verwendung: /register [Passwort]");
    if(dini_Exists(data)) return SendClientMessage(playerid,WHITE,"Dieser Account ist bereits registriert.");


    dini_Create(data);
    dini_Set(data,"passwort",pw);
    return true;
    }


    dcmd_login(playerid, params[])
    {
    new data[64], gets[64];
    format(data,sizeof(data),"/user/%s.ini",name[playerid]);
    if (logged[playerid] == 1) return SendClientMessage(playerid,WHITE,"Du bist bereits eingeloggt.");
    if (!strlen(params)) return SendClientMessage(playerid,WHITE,"Verwendung: /login [Passwort]");
    if(!dini_Exists(data)) return SendClientMessage(playerid,WHITE,"Dieser Account ist noch nicht registriert.");


    gets = dini_Get(data,"password");
    if(strcmp(gets, "password", false) != pw)
    {
    SpawnPlayer(playerid);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Du hast dich erfolgreich eingeloggt");
    }
    SendClientMessage(playerid,WHITE,"Das Passwort stimmt nicht mit dem Account überein.");
    return true;
    }


    Mein Ziel ist es jetzt, das dass Passwort richtig gespeichert wird. Ich sitze das jetzt schon seit Stunden dran, habe aber keine Ahnung wie ich das hinkriegen könnte.


    mfg
    surrender

    Einmal editiert, zuletzt von hearteyy ()

  • Ohja ich kann schon viel besser durchatmen :D


    Aber ich bin leider neu in dcmd, bei strtock hätte ich das mit


    tmp = strtok(cmdtext, idx);


    gelöst aber bei dcmd ... Muss ich das so machen?:


    pw = strval(params);



    Btw. danke NachoMan dafür ist ein Forum da, nicht um den Fragenden die Ergebnisse auf dem Silberteller "hinzuwerfen", sondern ihm das denken selbst zu überlassen. :D


    // Push, ich brauch es immer noch...

    3 Mal editiert, zuletzt von hearteyy ()

  • Habs jetzt irgentwie hinbekommen, nun möchte ich aber nen Passworthash einbauen, und zwar den adler32. Dazu hab ich das gefunden. Da wird aber nur gezeigt wie das ins Login kommt, es wird dort aber kein Hash beim Registerabschnitt gemacht.


    Hier mein System mit Hash (nun wird das PW aber wieder gar nicht abgespeichert):



    //oben
    new tmppass[64];


    dcmd_register(playerid, params[])
    {
    new data[46], s[256];
    format(data,sizeof(data),"/user/%s.ini",name[playerid]);
    if (!strlen(params)) return SendClientMessage(playerid,WHITE,"Verwendung: /register [Passwort]");
    if(dini_Exists(data)) return SendClientMessage(playerid,WHITE,"Dieser Account ist bereits registriert.");


    strmid(tmppass, s, 0, strlen(params), 255);
    adler32_hash(tmppass);
    OnPlayerRegister(playerid,tmppass);
    return true;
    }


    dcmd_login(playerid, params[])
    {
    new data[46], s[256];
    format(data,sizeof(data),"/user/%s.ini",name[playerid]);
    if (logged[playerid] == true) return SendClientMessage(playerid,WHITE,"Du bist bereits eingeloggt.");
    if (!strlen(params)) return SendClientMessage(playerid,WHITE,"Verwendung: /login [Passwort]");
    if(!dini_Exists(data)) return SendClientMessage(playerid,WHITE,"Dieser Account ist noch nicht registriert.");


    strmid(tmppass, s, 0, strlen(params), 255);
    adler32_hash(tmppass);
    OnPlayerLogin(playerid,tmppass);
    return true;
    }
    //--------------------------------------------------------------------------------------------------------


    OnPlayerRegister(playerid, pw[])
    {
    new data[64], s[64];
    format(data,sizeof(data),"/user/%s.ini",name[playerid]);


    dini_Create(data);
    strmid(stats[playerid][password], pw, 0, strlen(pw), 255);
    dini_Set(data,"password",pw);
    dini_Set(data,"admin","0");
    dini_Set(data,"cash","0");


    format(s,sizeof(s),"Willkommen %s, du bist nun eingeloggt.",name[playerid]);
    SendClientMessage(playerid, WHITE, s);
    logged[playerid] = true;
    SpawnPlayer(playerid);
    return true;
    }


    OnPlayerLogin(playerid, pw[])
    {
    new data[64];
    format(data,sizeof(data),"/user/%s.ini",name[playerid]);
    if(adler32_hash(pw) == dini_Int(data, "password"))
    {
    format(data,sizeof(data),"/user/%s.ini",name[playerid]);


    stats[playerid][admin] = dini_Int(data,"admin");
    stats[playerid][cash] = dini_Int(data,"cash");
    SetPlayerMoney(playerid,stats[playerid][cash]);


    format(data,sizeof(data),"Willkommen %s!",name[playerid]);
    logged[playerid] = true;
    SpawnPlayer(playerid);
    SendClientMessage(playerid, WHITE, "Du hast dich erfolgreich eingeloggt.");
    SpawnPlayer(playerid);
    return true;
    }
    SendClientMessage(playerid,WHITE,"Das Passwort stimmt nicht mit dem Account überein.");
    return true;
    }




    Btw, ja die Variablen sind aus dem GF ich hab es versucht so zu übernehmen mit dem anderen Hash..

    2 Mal editiert, zuletzt von hearteyy ()