AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rückgabewert für Login-Funktion?

Ein Thema von Yheeky · begonnen am 25. Jun 2008 · letzter Beitrag vom 26. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 07:12
Hi,

ich habe eine Klasse und mit der Funktion "Login". Hier möchte ich nicht nur den Rückgabewert true oder false für Erfolg oder Misserfolg zurückgeben, sondern verschiedene "Fehlermeldungen" (z.B. falsches Passwort, nicht vorhandener Benutzername). Wie kann ich das am besten realisieren?

Zur Zeit sieht mein Funktionskopf so aus:

function Login : Boolean; Könnte natürlich einen Rückgabewert wie Cardinal benutzen und die Fehlermeldungen durchnummerieren, aber das ist sicherlich nicht die beste Lösung, oder?

Wäre super, wenn mir jemand einen Tipp geben kann.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 07:16
Die erste Möglichkeit hast Du ja schon angesprochen (wobei ich persönlich diese am Besten finde). Ein zweite wäre z.B.function Login(var sMeldung: string): Boolean; In sMeldung wird dann der entsprechende String hineingeschrieben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 08:05
Für so etwas nehme ich sehr gerne Aufzählungen her.

Etwa:
Delphi-Quellcode:
type
  TLoginResult = (lrOK, lrErrorWrongPW, lrErrorUserUnknown, ...);
.
.
  function Login: TLoginResult;
Und dann mit case im Aufrufer hantieren - idealerweise noch resourcestrings dort einsetzen.


Wann immer möglich, vermeide ich Rückgaben über die Parameter, aber auch nur, weil ich es aus logischen Gründen als für "nicht sehr elegant" empfinde. Das hat aber keine technischen Gründe.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 08:07
Also ich würde es so machen, wie bei MessageDlg.
Da wurden Konstanten mrYes, mrNo, mrCancel, usw definiert und einfach durchnummeriert.
Die Funktion MessageDlg gibt dann eine der Konstanten zurück.
über den Konstantennamen kannst Du auf vernünftige Weise darauf zugreifen.
Du hast also nicht "3" als Rückgabe, sondern lrPwdError oder so ähnlich.

Das wird bei Windows auch nicht anderst gemacht.
Seien das nun Windows-Messages, irgendwelche Fehlercode oder sonst was.

Und der grösste Vorteil:
Du kannst dann mit case..of arbeiten, was Du bei Strings nicht kannst.

Man kann dann ja noch zusätzlich als out-Parameter einen Result-Text verwenden.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#5

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 14:19
Genau so habe ich es jetzt gemacht 8)
DANKE!
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 15:27
Mal als neugierige Frage an alle: Was spricht gegen eine Exception im Fehlerfall?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 15:32
Zitat von OregonGhost:
Mal als neugierige Frage an alle: Was spricht gegen eine Exception im Fehlerfall?
Dagegen spricht, dass es ein kalkulierbarer "Fehler" ist und beeinflussbar ist.
Hier ist eine Exception fehl am Platz.

Ausserdem wäre das zu viel Overhead.
- Einige Exceptions definieren(EPasswortFalsch, EUserFalsch, E...)
- entsprechende Exception werfen
- Exceptions auffangen
- Exception auswerten und entsprechend reagieren
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#8

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 16:08
Zitat von RavenIV:
Dagegen spricht, dass es ein kalkulierbarer "Fehler" ist und beeinflussbar ist.
Hier ist eine Exception fehl am Platz.

Ausserdem wäre das zu viel Overhead.
- Einige Exceptions definieren(EPasswortFalsch, EUserFalsch, E...)
- entsprechende Exception werfen
- Exceptions auffangen
- Exception auswerten und entsprechend reagieren
Verstehe ich ehrlich gesagt nicht. Beim Anlegen einer Datei ist ein Schreibschutz, Platte voll o.ä. auch ein kalkulierbarer Fehler, der gar nicht so selten ist, wie man vielleicht denkt, ebenso beim Öffnen einer Datei.
- Statt Exceptions definierst du lauter Konstanten.
- Statt Exceptions zu werfen, gibst du Konstanten zurück.
- Statt Exceptions aufzufangen, musst du die verschiedenen Fälle einzeln auswerten (es gibt keine eventuelle Klassenhierarchie wie bei Exceptions, die das Handling vereinfachen, z.B. IOException als Oberbegriff).
- Eventuelle Fehlermeldungen musst du explizit überall bereitstellen, wo die jeweilige Funktion aufgerufen wird.

Und der Overhead, naja, wie oft pro Sekunde wird eine Funktion "Login" aufgerufen?

Ich will hier nichts in Frage stellen. Aber mich interessiert doch die Rationalität, die ich hier nicht wirklich sehe, mit der hier (in diesem Beispiel, nicht in der DP allgemein ) so kategorisch Fehlermeldungen gegenüber Exceptions bevorzugt werden. Für mich ist eine Funktion Login, was immer diese nun genau macht, ein klassisches Beispiel für einen vorwärtsgerichteten Programmablauf - entweder ist, im Idealfall, alles in Ordnung, oder man muss einen Fehler behandeln, soweit möglich. Wenn man erfolgreich durch ist, muss man die Funktion nicht noch einmal aufrufen - im Fehlerfall vermutlich schon, wenn man sich davon Erfolg verspricht. Da hätte ich persönlich jetzt eine Exception eingesetzt, in dessen Handler man eben den erneuten Versuch vorbereitet. Je nach Fehler kann man diesen Fehler dann auch relativ unproblematisch an übergeordnete Routinen weiterreichen.
Ich meine, ich höre auch gelegentlich von einigen C++-Programmierern, die soviel Angst vor dem Overhead von Exceptions haben, dass ihr Code früher oder später nur noch ein Wust von Fehlerüberprüfungen ist, aber Delphiprogrammierer neigen doch eigentlich nicht zu sowas
Jedenfalls, in so einem Fall würde ich die Exception einfach vorziehen. Der Code, weder in der Funktion noch der aufrufende, wird dadurch nicht komplizierter, potenziell wird die Behandlung an dieser Stelle (oder, wichtiger, darüber) sogar einfacher und übersichtlicher.

Falls diese Diskussion nicht hierher passt (naja, irgendwie passt sie relativ gut zur Frage), Antworten gerne auch per PN.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 16:09
Zitat von Yheeky:
sondern verschiedene "Fehlermeldungen" (z.B. falsches Passwort, nicht vorhandener Benutzername).
Wobei du dem Benutzer und besonders dem Hacker nie verraten solltest, woran genau der Login gescheitert ist.
Man sollte nur eine ganz allgemeine Meldung ala
"Benutzer / Passwort falsch oder Benutzer wurde gesperrt" oder
"Your account may be disabled or blocked or the username/password you entered is incorrect"
ausgeben.
Und zusätzlich vor der Meldung einen Sleep(1500) einlegen um Brute-force Angriffe zu verhindern.
Von daher braucht auch der Rückgabewert nicht so detailiert sein und es reicht im Prinzip ein Boolean.
Zum Debuggen aber vielleicht doch ganz nützlich.
Andreas
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#10

Re: Rückgabewert für Login-Funktion?

  Alt 25. Jun 2008, 16:11
Zitat von shmia:
Zum Debuggen aber vielleicht doch ganz nützlich.
Nur zum Debuggen reicht speziell bei der von dir beschriebenen Vorgehensweise vermutlich auch ein Logeintrag.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz