我正在嘗試爲使用sqlite3存儲登錄憑據的iphone應用程序創建登錄屏幕。Xcode登錄屏幕sqlite3數據庫身份驗證問題
以下是我用來處理身份驗證功能:
-(void) enter
{
const char *dbpath = [databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &DBLogin) == SQLITE_OK)
{
NSLog(@"Connected to Database");
NSString *querySQL = [NSString stringWithFormat:@"SELECT id FROM User WHERE id=\"%@\"",login.text];
NSString *s = password.text;
const char *query_stmt = [querySQL UTF8String];
NSLog(@"String is %s",query_stmt);
NSLog(@"Pass is %@",s);
if (sqlite3_prepare_v2(DBLogin,query_stmt, -1, &statement, NULL) ==!SQLITE_NULL)
{
NSLog(@"Executed Correctly");
querySQL = [NSString stringWithFormat:@"SELECT password FROM User WHERE password=\"%@\"",password.text];
query_stmt = [querySQL UTF8String];
const char *f= [login.text UTF8String];
NSLog(@"String is %s",query_stmt);
NSLog(@"Pass is %@",s);
// const char *l = [login.text UTF8String];
// sqlite3_bind_text(statement, 1, query_stmt, -1, SQLITE_STATIC);
if (sqlite3_prepare_v2(DBLogin,query_stmt, -1, &statement, NULL) == !SQLITE_NULL)
{
if(sqlite3_bind_text(statement, 1,f , -1, SQLITE_STATIC))
status.text= @"Congratulations";
}
else
{
NSLog(@"error");
}
}
else
{
NSLog(@"Failed");
status.text [email protected]"ERROR!";
}
}
}
,這是我的數據庫模式:
CREATE TABLE User (id varchar(20) PRIMARY KEY, password varchar(20));
我覺得有什麼不對的我通過的方式是通過login.text
或password.text
的細節。根據NSLog
它傳遞正確的值,但它似乎沒有檢查它是否是正確的輸入。它似乎認爲一切都很好,無論我輸入什麼,都會顯示status.text = Congratulations
。
我不知道如何解決這個問題,並希望得到任何幫助。如果需要,我可以提供更多信息。提前致謝!
爲什麼你只是如果密碼存在檢查數據庫中,而不是檢查,如果密碼正確針對特定用戶的方式嗎? –
我必須能夠使用數據庫中的數據對用戶進行身份驗證。我不知道如何檢查密碼是否對用戶正確,所以任何幫助,將不勝感激。 – user1431272
用戶數據在安裝應用程序時如何首次進入數據庫?它是隨應用程序提供的,他們被告知用戶名/密碼,或者他們在第一次運行應用程序時是否輸入用戶名/密碼?如果他們進入另一臺設備會發生什麼情況 - 您是否希望用戶名和密碼也可以使用?還有許多其他問題需要您決定 –