2016-11-03 1 views
0

저는 sqlite를 매우 새로 도입했습니다. 사용자 이름과 암호가 인수로 전달되고 암호가 테이블 이름의 해당 사용자 이름에 이미 CREDENTIALS로 저장되어 있습니다. 암호가 맞는지 확인하는 방법은 무엇입니까? 덕분에 내가 제대로 귀하의 요구 사항을 이해한다면C++에서 sqlite의 유효한 암호를 사용자 인증합니다.

 bool authenticateUser(string USER, string PASS) 
     { 
      sqlite3_stmt *pSelectStatement = NULL; 
      int iResult = SQLITE_ERROR; 
      bool ret = true; 
      insertQuery<<"SELECT * FROM CREDENTIALS WHERE USERID LIKE '"<<USER<<"' AND PASSWORD LIKE '"<<PASS<<"';"; 
      iResult = sqlite3_prepare16_v2(db, insertQuery.str().c_str(), -1, &pSelectStatement, 0); 
      if ((iResult == SQLITE_OK) && (pSelectStatement != NULL)) 
      { 
       iResult = sqlite3_step(pSelectStatement); 
       //was found? 
       if (iResult == SQLITE_DONE) { 
        ret = false; 
        sqlite3_clear_bindings(pSelectStatement); 
        sqlite3_reset(pSelectStatement); 
       } 
       iResult = sqlite3_finalize(pSelectStatement); 
      } 
      return ret; 
     } 
+0

어떤 종류가'USERID' 열입니까? 그리고 아마도 데이터베이스에있는 암호를 저장하고 싶지 않을 것입니다. 읽기 http://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database – Valentin

답변

0

, 당신이해야 할 모든 자격 증명 테이블에 select count 쿼리를 해고하고 그 결과를 평가합니다. 개수가 0이면 암호 또는 사용자 ID가 잘못되었습니다. 0보다 큰 경우 (이상적으로 1과 같음) 자격 증명이 유효합니다.

는 다음 작동하는지 확인 : 당신이 이미하고있는로

insertQuery<<"SELECT COUNT(1) FROM CREDENTIALS WHERE USERID LIKE '"<<USER<<"' AND PASSWORD LIKE '"<<PASS<<"';";

그런 다음 sqlite3_prepare16_v2sqlite3_step를 호출합니다. 그런 다음 sqlite3_column_int으로 전화하여 값을 얻으십시오. sqlite3_step 다음 호출은 SQLITE_DONE을 반환합니다.

0

난 그냥 기능에 문제를 파악 :

iResult=sqlite3_prepare16_v2(db, insertQuery.str().c_str(), -1, &pSelectStatement, 0); 

난 그냥 그것을 변경 :

iResult = sqlite3_prepare_v2(db, insertQuery.str().c_str(), -1, &pSelectStatement, 0); 

이제 문제는 해결된다. 감사합니다.

관련 문제