Login merken und activities öffnen - shared preferences

Ich kann aber nur nochmal auf den Kommentar von keen hinweisen, dass zwar deine App so geschützt ist, aber jeder der die Adresse zu deinem Service kennt. (=jeder der die App hat) dort beliebig http Anfragen stellen kann. D.h. auch potentiell Daten anderer User abfragen kann wenn es keine serverseitige Sicherheit gibt.
Als Faustregel: clientseitiger Login ist ein Convenience Feature, kein Sicherheitsfeature. Sicherheit bekommst du nur durch serverseitige Authentifizierung.
Best Practice bei solch einem Vorgehen wäre eben serverseitig einen Login zu schaffen, der ein Token ausstellt mit dem die API angefragt werden kann. Die Daten sollten so abgelegt sein, dass der User identifiziert werden kann dem sie gehören. Und auch nur dieser User sollte sie lesen und schreiben können mit seinem Token. (Außer natürlich es ist eine kollaborative App)

Du hast natürlich Recht, dass du im ersten Schritt zum Ausprobieren unter der Familie vielleicht erstmal ohne auskommst, aber ich würde dir dringend raten dich damit zu beschäftigen bevor es zu spät ist.
 
  • Danke
Reaktionen: haner und swa00
haner schrieb:
Besten Dank für eure zahlreichen Ratschläge und Hinweise. Ja, die App soll später in den PlayStore. Bis dahin werde ich sie aber erstmal im kleinen Kreis testen. Der aktuelle Plan ist nun das Abfragen des Login-Status über das Anlegen einer Datei im internen Storage. Dort speichere ich bei erfolgreichem Login ein "yes". Solange ein "yes" gespeichert ist, kann dann auf die Activities mit notwendigem Login zugegriffen werden.

Habe bereits mit der Umsetzung begonnen. Das Schreiben und Lesen des Strings loginstatus funktioniert schonmal. Nun habe ich ein kleines Anfängerproblem (glaube ich zumindest). Die Abfrage im if-statement (if(loginstatus == "yes")) funktioniert leider nicht. Es kommt die Fehlermeldung "cannot resolve symbol". Warum? Ich lasse mir zuvor doch den String mit einem Toast ausgeben, um zu überprüfen ob das Lesen wirklich fuktioniert hat - und das klappt auch.

Codeauszug der MainActivity.java
Code:
@Override
    public boolean onOptionsItemSelected(MenuItem item) {

        try {
            FileInputStream fileIn=openFileInput("login.txt");
            InputStreamReader InputRead= new InputStreamReader(fileIn);

            char[] inputBuffer= new char[READ_BLOCK_SIZE];
            String loginstatus="";
            int charRead;

            while ((charRead=InputRead.read(inputBuffer))>0) {
                // char to string conversion
                String readstring=String.copyValueOf(inputBuffer,0,charRead);
                loginstatus +=readstring;
            }
            InputRead.close();
            Toast.makeText(getBaseContext(), loginstatus,Toast.LENGTH_SHORT).show();
            
        } catch (Exception e) {
            e.printStackTrace();
        }


        int id = item.getItemId();
        if (id == R.id.add_data) {
            if(loginstatus == "yes") {
                Intent intent = new Intent(this, NeueActivity.class);
                startActivity(intent);
                return true;

            } else {
                Intent intent = new Intent(this, LoginActivity.class);
                startActivity(intent);
                return true;
            }
        }
 
a) String Vergleiche niemals mit == sondern immer mit equals.
b) du definierst loginstatus in deinem try Block. Das ist ein anderer Scope als dein if Block. Geschweifte Klammern öffnen einen sogenannten Scope. Alles was nach einer geöffneten geschweiften Klammer steht ist nach der entsprechenden schließenden geschweiften Klammer nicht mehr sichtbar. (ganz grob gesagt)
Du musst also loginstatus vor deinem try definieren.
 
  • Danke
Reaktionen: swa00 und haner

Ähnliche Themen

F
Antworten
0
Aufrufe
821
FlorianAlfredo
F
B
Antworten
6
Aufrufe
1.016
jogimuc
J
D
Antworten
9
Aufrufe
1.730
jogimuc
J
Zurück
Oben Unten