完整的登陆注册 s端c端交互。

This commit is contained in:
2023-05-14 15:28:21 +08:00
parent 5524dcc9b6
commit dd89995e42
12 changed files with 75 additions and 23 deletions

View File

@@ -68,17 +68,20 @@ const char descriptor_table_protodef_mp_2emph_2eproto[] PROTOBUF_SECTION_VARIABL
"OGOUT\020\025\022\030\n\024MP_RESPONSE_REGISTER\020\026\022\026\n\022MP_"
"REQUEST_PE_CODE\020(\022\027\n\023MP_RESPONSE_PE_CODE"
"\020<\022\025\n\021MP_REQUEST_IM_ADD\020d\022\026\n\022MP_RESPONSE"
"_IM_ADD\020x*\212\003\n\013MP_SUB_TYPE\022\032\n\026MP_REQUEST_"
"_IM_ADD\020x*\204\004\n\013MP_SUB_TYPE\022\032\n\026MP_REQUEST_"
"LOGIN_EMAIL\020\000\022\032\n\026MP_REQUEST_LOGIN_PHONE\020"
"\001\022\034\n\030MP_REQUEST_LOGIN_ACCOUNT\020\002\022\035\n\031MP_RE"
"QUEST_REGISTER_EMAIL\020\003\022\035\n\031MP_REQUEST_REG"
"ISTER_PHONE\020\004\022!\n\035MP_REQUEST_ADD_CONTACT_"
"PERSON\020\024\022$\n MP_REQUEST_REMOVE_CONTACT_PE"
"RSON\020\025\022(\n$MP_REQUEST_BLACK_LIST_CONTACT_"
"PERSON\020\026\022\"\n\036MP_RESPONSE_ADD_CONTACT_PERS"
"ON\020(\022%\n!MP_RESPONSE_REMOVE_CONTACT_PERSO"
"N\020)\022)\n%MP_RESPONSE_BLACK_LIST_CONTACT_PE"
"RSON\020*b\006proto3"
"ISTER_PHONE\020\004\022\034\n\030MP_REQUEST_PE_CODE_EMAI"
"L\020\005\022\035\n\031MP_RESPONSE_PE_CODE_EMAIL\020\006\022\034\n\030MP"
"_REQUEST_PE_CODE_PHONE\020\007\022\035\n\031MP_RESPONSE_"
"PE_CODE_PHONE\020\010\022!\n\035MP_REQUEST_ADD_CONTAC"
"T_PERSON\020\024\022$\n MP_REQUEST_REMOVE_CONTACT_"
"PERSON\020\025\022(\n$MP_REQUEST_BLACK_LIST_CONTAC"
"T_PERSON\020\026\022\"\n\036MP_RESPONSE_ADD_CONTACT_PE"
"RSON\020(\022%\n!MP_RESPONSE_REMOVE_CONTACT_PER"
"SON\020)\022)\n%MP_RESPONSE_BLACK_LIST_CONTACT_"
"PERSON\020*b\006proto3"
;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_mp_2emph_2eproto_deps[1] = {
};
@@ -87,7 +90,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mp_
};
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_mp_2emph_2eproto_once;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_mp_2emph_2eproto = {
false, false, descriptor_table_protodef_mp_2emph_2eproto, "mp.mph.proto", 774,
false, false, descriptor_table_protodef_mp_2emph_2eproto, "mp.mph.proto", 896,
&descriptor_table_mp_2emph_2eproto_once, descriptor_table_mp_2emph_2eproto_sccs, descriptor_table_mp_2emph_2eproto_deps, 1, 0,
schemas, file_default_instances, TableStruct_mp_2emph_2eproto::offsets,
file_level_metadata_mp_2emph_2eproto, 1, file_level_enum_descriptors_mp_2emph_2eproto, file_level_service_descriptors_mp_2emph_2eproto,
@@ -129,6 +132,10 @@ bool MP_SUB_TYPE_IsValid(int value) {
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 20:
case 21:
case 22:

View File

@@ -54,6 +54,12 @@ void handler::remove_user(bufferevent* bev) {
session->remove_user(bev);
}
std::optional<std::string> handler::get_session(bufferevent *bev, const std::string &session_key) {
return session->get_session(bev, session_key);
}

View File

@@ -22,9 +22,11 @@ public:
public:
static void remove_user(bufferevent* bev);
static std::optional<std::string> get_session(bufferevent* bev, const std::string &session_key);
protected:
static class session* session;
bufferevent* m_bev;
};

View File

@@ -21,7 +21,7 @@ void session::add_user(mp::sri* sri, std::shared_ptr<agreement_request>& request
}
void session::remove_user(bufferevent *bev) {
uint64_t target_ele;
uint64_t target_ele = -1;
for (const auto &item: user_fd) {
if (bev == item.second->bev) {
target_ele = item.first;
@@ -29,7 +29,10 @@ void session::remove_user(bufferevent *bev) {
}
}
user_fd.erase(target_ele);
// 还未登陆就不删除user
if (target_ele != -1) {
user_fd.erase(target_ele);
}
bufferevent_free(bev);
}
@@ -56,11 +59,18 @@ std::optional<std::pair<uint64_t, userinfo*>> session::find_user_fd(uint64_t acc
}
/// user bev fd lik session
void session::init_session(bufferevent *bev) {
std::map<std::string, std::string> sub_session;
session_map.insert({bev, sub_session});
}
// 给用户 添加会话信息
void session::set_session(bufferevent* bev, const std::string &session_key, const std::string &session_value) {
printf("code: %s\n", session_value.c_str());
auto ret = session_map.find(bev);
// 先看有没有 bev session 没有初始化并且添加一个 有取出来sub session 在添加
if (ret != session_map.cend()) {
if (ret == session_map.cend()) {
std::map<std::string, std::string> sub_session;
sub_session.insert({session_key, session_value});
session_map.insert({bev, sub_session});
@@ -88,7 +98,7 @@ std::optional<std::string> session::get_session(bufferevent* bev, const std::str
auto sess = session_map.find(bev);
std::map<std::string, std::string> sub_sess;
if (sess != session_map.cend()) {
auto ret = sess->second.find("session_key");
auto ret = sess->second.find(session_key);
if (ret != sub_sess.cend()) {
return ret->second;
}
@@ -125,3 +135,4 @@ void session::timing() {
}
});
}

View File

@@ -29,6 +29,7 @@ public:
bool is_user(const std::string& account);
std::optional<std::pair<uint64_t, userinfo*>> find_user_fd(uint64_t account);
void init_session(bufferevent* bev);
void set_session(bufferevent* bev, const std::string& session_key, const std::string& session_value);
std::optional<std::string> get_session(bufferevent* bev, const std::string& session_key);
void remove_session(bufferevent* bev, const std::string& session_key);

View File

@@ -7,11 +7,12 @@
void PEVerifCodeController::run(std::shared_ptr<agreement_request> request, std::shared_ptr<agreement_response> response) {
auto sri = new mp::sri();
// 请求验证码
if (request->m_mph->mp_type() == mp::MP_REQUEST_PE_CODE) {
if (request->m_body.subcommand() == mp::MP_REQUEST_PE_CODE_EMAIL) {
// 生成验证码
std::string code = peVerifCodeService.gen_code();
// 发送验证码至邮
bool state = peVerifCodeService.send_email(request->m_body.account(), code);
// 设置session 字段
session->set_session(request->m_bev, "code", code);
@@ -24,10 +25,6 @@ void PEVerifCodeController::run(std::shared_ptr<agreement_request> request, std:
}
}
else if (request->m_mph->mp_type() == mp::MP_RESPONSE_PE_CODE) {
}
response->set(sri, request->m_bev);
delete sri;
}

View File

@@ -16,8 +16,11 @@ void UserProveController::run(std::shared_ptr<agreement_request> request, std::s
}
// 注册
else if (request->m_mph->mp_type() == mp::MP_REQUEST_REGISTER) {
auto sri = service.register_(request->m_body.subcommand(),
request->m_body.account(), request->m_body.password());
auto session_code = session->get_session(request->m_bev, "code");
auto sri = service.register_(request->m_body.subcommand(),request->m_body.account(),
request->m_body.password(), request->m_body.data(), session_code);
response->set(sri, request->m_bev);
}

View File

@@ -10,7 +10,7 @@ std::string PEVerifCodeService::gen_code() {
std::string code;
for (int i = 0; i < 6; ++i) {
code.push_back((char )std::experimental::randint(30, 39)); // 0-9
code.push_back((char )std::experimental::randint(48, 57)); // 0-9
}
emailcode = code;

View File

@@ -3,6 +3,7 @@
//
#include "UserService.h"
#include "handler.h"
#include <experimental/random>
///************************************************* 登陆 ***********************************************************///
@@ -65,9 +66,23 @@ void UserService::login_fun(const std::string& account, const std::string& passw
///********************************************** 注册 *****************************************************////
// 注册 邮箱注册
mp::sri *UserService::register_(mp::MP_SUB_TYPE subType, const std::string &phone_email, const std::string &password) {
mp::sri *UserService::register_(mp::MP_SUB_TYPE subType, const std::string &phone_email,
const std::string &password, const std::string& code,
const std::optional<std::string>& session_code) {
sri_clear();
if (session_code.has_value()) {
if (session_code.value() != code) {
sri->set_sri_code(mp::MP_PE_CODE_FAIL);
sri->set_sri_msg("验证码不正确");
return sri;
}
} else {
sri->set_sri_code(mp::MP_PE_CODE_FAIL);
sri->set_sri_msg("验证码失效");
return sri;
}
// 号池取号
auto account = userDb.fetch_account();
if (account.has_value()) {

View File

@@ -16,7 +16,8 @@ public:
public:
// 注册 邮箱注册
mp::sri* register_(mp::MP_SUB_TYPE subType, const std::string& email, const std::string& password);
mp::sri* register_(mp::MP_SUB_TYPE subType, const std::string& email,
const std::string& password, const std::string& code, const std::optional<std::string>& session_code);
public:

View File

@@ -104,6 +104,10 @@ enum MP_SUB_TYPE : int {
MP_REQUEST_LOGIN_ACCOUNT = 2,
MP_REQUEST_REGISTER_EMAIL = 3,
MP_REQUEST_REGISTER_PHONE = 4,
MP_REQUEST_PE_CODE_EMAIL = 5,
MP_RESPONSE_PE_CODE_EMAIL = 6,
MP_REQUEST_PE_CODE_PHONE = 7,
MP_RESPONSE_PE_CODE_PHONE = 8,
MP_REQUEST_ADD_CONTACT_PERSON = 20,
MP_REQUEST_REMOVE_CONTACT_PERSON = 21,
MP_REQUEST_BLACK_LIST_CONTACT_PERSON = 22,

View File

@@ -32,6 +32,11 @@ enum MP_SUB_TYPE {
MP_REQUEST_REGISTER_EMAIL = 3;
MP_REQUEST_REGISTER_PHONE = 4;
MP_REQUEST_PE_CODE_EMAIL = 5;
MP_RESPONSE_PE_CODE_EMAIL = 6;
MP_REQUEST_PE_CODE_PHONE = 7;
MP_RESPONSE_PE_CODE_PHONE = 8;
MP_REQUEST_ADD_CONTACT_PERSON = 20;
MP_REQUEST_REMOVE_CONTACT_PERSON = 21;
MP_REQUEST_BLACK_LIST_CONTACT_PERSON = 22;