2012-01-09 8 views
5

Jestem teraz pracuje na Sample login application w którym user może login z ich username i password naciskając login button. Jeśli numer user jest nowy, można go również zarejestrować, wybierając opcję username i password. I ta część aplikacji zadziałała.Jak zweryfikować poświadczenia wprowadzone przez użytkowników z jednego w bazie danych SQLite


Moje rzeczywiste pytanie brzmi: Jak mogę porównać użytkownik wszedł credentials z tym, który przechowywany w database.

użyłem SELECT zapytanie, aby wybrać nazwę użytkownika i pwd jak to

public void ValidateLogin(String un, String pwd) 
    { 
     SELECT_FROM = "SELECT u_name, u_pwd FROM" + table_name + "WHERE u_name == " + un + "AND u_pwd ==" + pwd; 
     db.execSQL(SELECT_FROM); 
    } 

gdzie username(un) i password(pwd) pochodzi z innego java file login.java.


Teraz proszę mi powiedzieć, w jaki sposób mogę dokonać pomyślne przejście do viewprofile stronę po udanym logowaniu?

+4

widzę cztery problemy tuż: 1) SQL nie jest java == jest nieprawidłowa składnia SQL. Zamiast tego użyj tylko 1 =. w SQL działa jako przypisania i walidacje. 2) un & pwd są znakami napisowymi i muszą być zawarte w tics ('), więc ... "WHERE u_name ='" & un + "'AND u_pwd ='" + pwd + "'" 3) Ta technika jest wadliwa jak pozostawia otwartą na iniekcję SQL. Zamiast tego użyj parametrów. 4) na końcu musisz sprawdzić liczbę wierszy zwracanych. Jeśli rząd wierszy == 1 zwróci wartość true, w przeciwnym razie zwróci false. – xQbert

+1

Co więcej, chociaż baza danych sklepów z Androidem znajduje się w katalogu aplikacji, nie zalecam przechowywania haseł jako zwykłego tekstu. Proponuję zamiast tego używać hashowej funkcji hasła. – Yury

+0

dzięki za odpowiedź xQbert i jury ... – JAaVA

Odpowiedz

1
You can use `cursor` with `rawquery` to validate username and password in one boolean type of method 

    public boolean ValidateLogin(String un, String pwd) 
     { 
     boolean chklogin=false;  
     c = db.rawQuery("SELECT u_name, u_pwd FROM " + table_name + " WHERE u_name = '"+ un + "' AND u_pwd ='"+ pwd + "'", null); 

     if(c==null) 
     { 
      //set boolean var to false 
       chklogin=false; 
      //message no such records 
     } 

     else 
     { 
      //set boolean var to true 
       chklogin=true; 
       c.moveToFirst(); 
     } 

     return chklogin; //boolean var 
} 
0

Najlepszym sposobem jest użycie kursora, zamiast zapytań wierszy,

String[] selectionArgs = {un,pwd}; 
Cursor cursor = db.query(table_name, {"u_name", "u_pwd"} , "u_name=? and u_pwd=?", selectionArgs , null, null, null); 

if (cursor.moveToNext()){ 
    //Success 
}else{ 
    //Failure 
} 
cursor.close(); 
Powiązane problemy