Подключение базы данных SQLite для реализации авторизации в приложении – это широко используемая практика, которая позволяет хранить информацию о пользователях и их учетных данных. SQLite – это компактная реляционная база данных, которая не требует отдельного сервера для работы, что делает ее идеальным выбором для встраиваемых систем и мобильных приложений.
Для начала работы с SQLite в C необходимо подключить необходимую библиотеку. Для этого используется директива include
Для создания базы данных и таблицы для хранения информации о пользователях можно воспользоваться следующим примером кода:
sqlite3 *db;
char *err_msg = 0;
int rc = sqlite3_open(users.db, &db);
if (rc != SQLITE_OK) {
fprintf(stderr, Cannot open database: %s\n, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
char *sql = CREATE TABLE Users( \
ID INT PRIMARY KEY NOT NULL, \
Username TEXT NOT NULL, \
Password TEXT NOT NULL);;
rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
if (rc != SQLITE_OK ) {
fprintf(stderr, SQL error: %s\n, err_msg);
sqlite3_free(err_msg);
sqlite3_close(db);
return 1;
}
sqlite3_close(db);
Данный код создает базу данных users.db и таблицу Users с тремя столбцами: ID (идентификатор), Username (логин пользователя) и Password (пароль пользователя). После создания базы данных и таблицы необходимо реализовать функции для регистрации и авторизации пользователей.
Для регистрации пользователя можно использовать следующий пример кода:
int register_user(sqlite3 *db, char *username, char *password) {
char *sql;
sqlite3_stmt *stmt;
int rc;
sql = INSERT INTO Users (Username, Password) VALUES (?, ?);
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
if (rc == SQLITE_OK) {
sqlite3_bind_text(stmt, 1, username, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, password, -1, SQLITE_STATIC);
} else {
fprintf(stderr, Failed to execute statement: %s\n, sqlite3_errmsg(db));
return 1;
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, Failed to insert data: %s\n, sqlite3_errmsg(db));
return 1;
}
sqlite3_finalize(stmt);
return 0;
}
Функция register_user принимает указатель на объект базы данных db, логин пользователя и его пароль. Она подготавливает SQL запрос для добавления новой записи в таблицу Users, привязывает значения логина и пароля к запросу и выполняет его.
Для авторизации пользователя можно использовать следующий пример кода:
int login_user(sqlite3 *db, char *username, char *password) {
sqlite3_stmt *stmt;
char *sql;
int rc;
sql = SELECT * FROM Users WHERE Username = ? AND Password = ?;
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
if (rc == SQLITE_OK) {
sqlite3_bind_text(stmt, 1, username, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, password, -1, SQLITE_STATIC);
} else {
fprintf(stderr, Failed to execute statement: %s\n, sqlite3_errmsg(db));
return 1;
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_ROW) {
fprintf(stderr, Failed to fetch data: %s\n, sqlite3_errmsg(db));
return 1;
}
sqlite3_finalize(stmt);
return 0;
}
Функция login_user принимает указатель на объект базы данных db, логин пользователя и его пароль. Она подготавливает SQL запрос для выборки данных о пользователе с указанным логином и паролем из таблицы Users и выполняет его. Если пользователь с указанным логином и паролем найден, функция завершается успешно, иначе возвращается ошибка.
Таким образом, подключение базы данных SQLite для авторизации в приложении в C позволяет эффективно управлять данными пользователей и обеспечить безопасность их учетных записей. Реализация функций регистрации и авторизации пользователей позволяет создать надежную систему доступа к приложению.