Sagt meine Website etwas dazu?
Ansonsten musst du wohl oder übel mal deine Includes checken oder Teile auskommentieren und prüfen ![]()
Sagt meine Website etwas dazu?
Ansonsten musst du wohl oder übel mal deine Includes checken oder Teile auskommentieren und prüfen ![]()
Warte mal...der Dialog beim Registrieren...macht da keinen Sinn?
Lösch den mal aus der Abfrage über dem bcrypt_hash
...kannst die außerhalb der if-Abfrage packen.
Bei Account Check...bzw danach muss doch der Dialog_Register Dialog aufgerufen werden...
Was steht denn unter Dialog_Info?!
...gibst du denn ein Passwort ein?
Dann pack da mal ein paar prints rein...
Wo bleibt der Code hängen...
Kommen Fehler? (Mysql Log...Server Log?)
Beim Registrieren ruft er anscheinend nichts auf.
Edit: Das sind die Funktionen für die Registrierung.
Das liegt an dieser Abfrage:
if(strlen(inputtext) < 6
strlen(inputtext) > 24)
Das ändere mal zu:
6 <= strlen(inputtext) <= 24
Schließlich soll das Passwort zwischen 6 und 24 Zeichen liegen..und nicht kleiner 6 oder größer 24...
Du musst lernen solche Fehler aufgrund der vorliegenden logischen Schlüsse zu ziehen ![]()
Okay, sieht gut aus ![]()
Dann leg mal einen neuen Account an...und schau, ob alles richtig ein- & ausgelesen wird ![]()
(Mit print Statements Werte vergleichen)
Ansonsten probiere ich es die Tage selbst mal aus...
Dann zeige bitte nochmal deinen ganzen Code ![]()
Du hast da stehen:
new bool:match = bcrypt_is_equal(), query[256],string[128],inputtext;
Wieso dieses inputtext? Bitte nirgends so deklarieren....schau mal wie ich das gemacht habe...
Und die String Länge sollte BCRYPT_HASH_LENGTH sein ![]()
#Handy...bin nu unterwegs
Was nutzt eigentlich das LIMIT im SELECT?
Das sagt deiner Datenbank, dass es nur 1 Statement gibt, was zurückgegeben werden muss.
Das ist performant das mit anzugeben, da er dann genau weiß, ah ich hab eins gefunden, jetzt kann ich aufhören und muss nicht noch alle anderen nach dem Namen durchsuchen ![]()
Wie mir auffällt, lädst du dort gar nicht das Passwort, also unter AccountLogin? ![]()
Das musst du dort laden, also das AccountInfo[playerid][account_Password]...sonst geht das natürlich nicht.
Wie mir auffällt lädst du dort generell nix über den User so wirklich?! ![]()
Da stimmt doch was nicht xD
Wie sieht denn nun dein Code aus, poste die entsprechenden Felder.
Nächstes mal kannst du btw ruhig einen eigenen Thread erstellen, falls Leute ähnliche Probleme haben, wäre das sehr hilfreich gewesen. (Hier geht das ja unter und ist nur für kleine Fragen gedacht).
(Darfst auch gerne etwas debuggen, wird in der Datenbank alles richtig gespeichert?)
Habe erst gedacht, dass die Standard Console damit nicht klar kommt
Also das ist ja Quatsch, weil die Standard Konsole ist die Standard Konsole, die kommt mit allem klar, deshalb ist es die Standard Konsole xD
Ja, da haben wir den Übeltäter, ich glaube die "neue" Konsole kann diese Bytes (Ansi Escape Codes) nicht verarbeiten.
Weiß nicht, da gibt es bestimmt irgend ein Tutorial (bin aber gerade mega zu faul danach zu suchen bzw nach example Code zu suchen).
Da musst du die Farben anders setzen, als über diese Bytes.
Auf der Standard Konsole hingegen müsste das funktionieren, da das ja extra für diese ausgelegt ist ![]()
Hmmm, ich frage mich, wieso man sowas nutzt o:
Weil, es gibt doch die Möglichkeit die Native Konsole einfach zu attachen, z.B.: http://www.csharp411.com/conso…rom-winforms-application/
Ansonsten kommt der wohl mit ein paar Bytes nicht zurecht.
Was genau gibst du denn da aus? Kannst du den Text evtl mal in ein File schreiben? ![]()
Oder das Ding kodiert falsch? Evtl mal UTF-8 ausprobieren ![]()
Da drehst du das um. Du lädst zuerst aus der MySQL Datenbank und prüfst das dann gegen.
So zum Beispiel:
case DIALOG_LOGIN:
{
new query[256];
mysql_format(handle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name` = '%e' LIMIT 1", AccountInfo[playerid][account_Name]);
mysql_pquery(handle, query, "AccountLogin", "ds", playerid,inputtext);
}
case DIALOG_PW_CHECK:
{
if(!response) return Kick(playerid);
if(!inputtext[0]) return SPD(playerid,DIALOG_PW_CHECK,DIALOG_STYLE_INPUT,"Falsches Passwort","Dein eingegebenes Passwort ist falsch!","Bestätigen","Abbrechen");
bcrypt_check(inputtext, AccountInfo[playerid][account_Password], "OnPasswordChecked", "d", playerid);
}
//Bei AccountLogin
public AccountLogin(playerid,inputtext[])
{
//Halt account laden und AccountInfo[playerid][account_Password] den hash eben setzen
//Ganz unten dann:
bcrypt_check(inputtext, AccountInfo[playerid][account_Password], "OnPasswordChecked", "d", playerid);
return 1;
}
public OnPasswordChecked(playerid)
{
new bool:match = bcrypt_is_equal();
if(!match) return SPD(playerid,DIALOG_PW_CHECK,DIALOG_STYLE_INPUT,"Falsches Passwort","Dein eingegebenes Passwort ist falsch!","Bestätigen","Abbrechen");
//Hier kannst den Spieler dann spawnen und einloggen :)
return 1;
}
Alles anzeigen
Fast, also den inputtext (das ist das Klartext Passwort) hast du ja jetzt schon zu einem Hash verwandelt, also diesen auch nur in die Datenbank speichern, ergo, so schreiben:
public OnPasswordHashed(playerid)
{
new hash[BCRYPT_HASH_LENGTH],query[256];
bcrypt_get_hash(hash);
mysql_format(handle, query, sizeof(query), "INSERT INTO `users` (`name`, `password`) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], hash);
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
return 1;
}
Du packst das MySQL Insert Query einfach in den OnPasswordHashed Callback.
Dadurch hast du ja direkt Zugriff auf den Hash.
Einfach nur den Code umstrukturieren ![]()
Wo genau hapert es denn, das Tutorial ist doch ziemlich eindeutig (https://forum.sa-mp.com/showthread.php?t=453544) ![]()
Vielleicht zeigst du uns deinen bisherigen Code und markierst, wo genau du Schwierigkeiten hast beim Weitermachen.
Kannst du uns den Code vom TextDraw zufällig zeigen? ![]()
(Auch wenn du das im TextDraw Studio machst, kannst dir den ja exportieren lassen...)
Versuch mal die redistributable c++ ab 2012 oder so zu installieren ![]()