// // Created by dongl on 23-4-23. // #include "UserDB.h" #include "template_table/im_user.h" #include "proto/mp.sri.pb.h" UserDB::~UserDB() { delete sri; } mp::sri* UserDB::login(uint64_t account, const std::string& password) { auto query = conn->query("select * from im_user where account=%0:account;"); query.parse(); std::vector v; query.storein(v, account); printf("info: %s\n", query.info().c_str()); sri = new mp::sri(); // 无账户 if (v.empty()) { printf("无此用户\n"); sri->set_sri_msg("account null!"); sri->set_sri_code(mp::MP_LOGIN_ACCOUNT_NOT); return sri; } // 判断密码 im_user user = v[0]; std::string source = std::to_string(account) + password + user.password_salt; size_t password_hash = std::hash()(source); // hash_password(&password_hash, source.c_str(), source.size()); if (user.password == std::to_string(password_hash)) { printf("登陆成功\n"); sri->set_sri_msg("登陆成功!"); sri->set_sri_code(mp::MP_LOGIN_SUCCESS); sri->set_sri_token("token"); sri->set_sri_username(user.username); } else { printf("登陆失败\n"); sri->set_sri_msg("登陆失败!"); sri->set_sri_code(mp::MP_LOGIN_FAIL); sri->set_sri_username("null"); sri->set_sri_token("null"); } return sri; } mp::sri *UserDB::register_(uint64_t account, const std::string &password, const std::string &password_salt, const std::string& client_info) { mysqlpp::String info(client_info); if (!sri) { sri = new mp::sri(); } // 检验重复账户 auto query = conn->query("select account from im_user where account=%0:account;"); query.parse(); auto is_exist = query.store(account); printf("error: %s, row: %zu\n", conn->error(), is_exist.num_rows()); if (!is_exist.empty()) { sri->set_sri_msg("帐号已经注册!"); sri->set_sri_code(mp::MP_REGISTER_EXIST); sri->set_sri_username("null"); sri->set_sri_token("null"); printf("帐号已经注册!\n"); return sri; } // 添加账户 query.insert(im_user(account, "用户"+ std::to_string(account), password, password_salt, info)); auto ret = query.exec(); if (ret) { sri->set_sri_msg("注册成功!"); sri->set_sri_code(mp::MP_REGISTER_SUCCESS); sri->set_sri_username("null"); sri->set_sri_token("null"); printf("注册成功!\n"); } else { sri->set_sri_msg("注册失败!"); // sri->set_sri_code(mp::MP_REGISTER_EXIST); sri->set_sri_username("null"); sri->set_sri_token("null"); printf("注册失败!\n"); } return sri; } mp::sri *UserDB::logout(uint64_t account) { return nullptr; }