Login Status zur Datenbankoperation verwenden, wie?

  • Hallo ich habe durch folgendes Tutorial einen Login/Registrierung hinbekommen:


    http://www.androidhive.info/20…ith-php-mysql-and-sqlite/


    Das ganze klappt auch.


    Meine Frage:


    Wie kann ich nur die Daten vom eingeloggten Benutzer nutzen, um mit seinen Werten z.B. Operationen durchzuführen (überführen in eine andere Datenbank)


    Beispiel:


    Man nehme an es gibt folgende Tabellen


    User:
    Hans
    Steffan
    Lisa


    Buch:
    Buch X
    Buch Y
    Buch Z


    Wenn sich Hans einloggt und Buch X ausleiht, soll das in die Tabelle Ausleihe hinzugefügt werden.
    Quasi --> Ausleihe: Hans, Buch X


    Aber wie kann das System wissen, wer gerade eingeloggt ist - anhand welcher Parameter kann das ausgemacht werden, vor allem jetzt auf das obige Tutorial in dem Link?

  • Der User muss sich natürlich in deine App auch einloggen können...



    Bsp:


    User startet App -> User kann sich an der Datenbank anmelden oder ein neues Login erstellen


    -> Neues Login: User gibt Name / gwünschtes Passwort ein -> Daten werden an die Benutzerdatenbank geschickt und dort gespeichert.
    in deiner App speicherst du die Logindaten ebenfalls (falls gewünscht), normalerweise schickt man hier keine bzw nur einmalig "Klardaten" (Text) hin und her, weil das HTTP Protokoll ausgelsen werden kann -> stichwort Verschlüsselung
    (in den Beispielen von AndroidHive wird da nicht eingegangen -> einfach mal bei Google danach suchen - da gibt es einige Beispiele -> Java php crypt hash
    -> Rückgabe der User ID an App und Speicherung in Sharedprefs, oder wie auch immer


    Hier ein schönes Beispiel:


    http://www.androidsnippets.com…t-between-android-and-php



    ------------
    Nun der Teil deiner Frage: Nutzererkennung.


    -> Bei jeder Datenbankaktion schickst du nun diese Userdaten einfach mit, auch hier sollten die Daten verschlüsselt sein. Passwörter gehashed.


    Auf der Serverseite (php) -> entschlüsselst du die Daten wieder und prüfst du nun als erstes ob die mitgeschickten User Daten valid sind , wichtig hier ist auch immer eine Rückmeldung an deine App zu senden, damit der User weiss was los ist.


    -> Benutzer in der Datenbank -> nein -> Rückgabe Fehler "User nicht gefunden"
    -> Ja ist er -> Prüfe Passwort -> falsch -> Rückgabe Fehler "Falsches Passwort"
    -> Ok Daten sind Ok -> Query ausführen ->
    Buchverleihe an Hans -> das ist ja eine n:m Beziehung und würde über eine Kreuztabelle zu realisieren sein. ( user_id, buch_id, Ausleihdatum, Frist)


    Rückmeldung an App -> Einfache Ok-meldung oder sogar Rückgabe von Datenpaket

  • Bedanke mich erstmal bei Ihnen - das mit dem registrieren/login mit einer MySQL Datenbank habe ich auf die Reihe bekommen.
    Der User kann sich registrieren und sich einloggen. Ich glaube Sie sprechen da das richtige an mit den SharedPreferences - ich habe in meinem Code folgendes:



    public boolean isUserLoggedIn(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    int count = db.getRowCount();
    if(count > 0){
    // user logged in
    return true;
    }
    return false;
    }
    Ich frage mich ob das alleine ausreicht, damit bei einer Aktion (im obigen Beispiel die Aktion dass der eingeloggte User ein BUch ausleiht) die Daten vom eingeloggten User verwendet werden und nicht von einem anderen.


    Ich füge mal im Anhang mein Projekt ein ( http://androidprojekt.esy.es/Login.zip ), damit man mein Problem eventuell besser nachvollziehen kann.


    Es geht um ein Glücksspiel mit folgenden Elementen:


    - Login / Registration / Erstellen und Eintreten in eine Spielsitzung


    User sollen sich registrieren, dann einloggen und eine Spielsitzung(session) erstellen können in die sie beitreten können.
    Das Problem gerade ist das beitreten, dass ich nicht hinbekomme, auch in Hinsicht, dass nur die Daten vom eingeloggten User verwerndet werden.


    Im Anhang befindet sich auch der Entwurf der Datenbank, die schon implementiert ist.
    Die Tabelle "inside_session" soll wie bei der Ausleihe die Daten vom eingeloggten user + gewählter Sitzung bekommen


    Würde mich freuen, wenn mir da jemand wirklich weiterhelfen kann , bzw im Code dass selbst macht mit dem "beitreten in eine Sitzung", denn ich bekomme das seit Tagen selbst nicht hin - würde mich auch mit einer Kleinigkeit bedanken :D


  • Das ist natürlich nicht wirklich sicher bzw. macht auch so keinen Sinn, deswegen


    hätte ich da ein paar Anmerkungen:


    Bei einer Android App, kann ja immer maximal eine Person angemeldet sein.
    Diese Daten in einer Datenbank zu speichern ist vielleicht etwas zu viel Overhead.
    Zum Speichern einzelner Wert,Value Paare gibt es unter Android die SharedPreferences


    http://developer.android.com/r…nt/SharedPreferences.html


    Wie im ersten Post beschrieben, wird es immer notwenig sein den "User" eindeutig zu identifizieren. Das heisst in der Kommunikation mit dem Server muss ich mich immer authentifizieren.


    Wenn ich mich beim Server anmelde -> sende ich einen Request -> Name/Passwort -> Als Rückmeldung vom Server bekomme ich die Eindeutige ID der Datenbank zurück und ein OK - in allen anderen Fehler gibt es entsprechende Fehlermeldungen (Falsches Passwort, User nicht gefunden bitte registrieren, ect pp)


    -> Um nicht jedes Mal das Loginprozedere neu zu vollziehen, kann ich dem User anbieten - in der app eingeloggt zu bleiben.


    -> in den Sharedprefs kann ich mir dann ein Feld : loggedIn = true setzen, weiterhin userid= rückgabeid der DB, username= , passwd=


    -> sobald ich in der app mal auslogge, setzte ich diese Werte zurück und ein erneutes Login/Anmelden ist notwendig.


    -------------------------------
    Mit diesen Daten kann ich jetzt super mit dem Server kommunizieren. (siehe erster Post)


    -------------------------------


    Der 2te Schritt wäre die Anmeldung an eine Session:


    Das würde ja analog verlaufen -< User Daten an Server schicken <- in die Response packe ich eine freie Spiel-Session ID


    -> diese Speichere ich mir wieder in den Shared-prefs: sessionloggedin = true / sessionid = xxx


    Jede Kommunikation die ein Session betrifft (also jede spielinteraktion) bekommt alle Daten mitgeschickt,


    userid, sessionid, passwort -> auf der Serverseite muss ich natürlich trotzdem immer den Gegencheck machen und bei Bedarf den User informieren:


    -> Login Daten prüfen -> wenn alles IO dann weiter zur Sessionprüfung -> Fehler Daten Falsch/ Abbruch


    -> Sessionprüfung: -> ist Session überhaupt noch existent oder Spiel bereits beendet/(abgelaufen
    -> ist der User überhaupt Teil der Spielsession ?


    -> Ja ? -> dann Interaktion ausführen.


    --------------------------------


    Bei Android-Hive gibt es ein paar Seiten später noch ein Tutorial zur CRUD Kommunikation pers JSON/PHP.
    So eine Schnittstelle müssen Sie für Ihr Spiel Backend schreiben. Der Knotenpunkt wo alle App Kommunikation aufläuft.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!