完整的登陆注册 s端c端交互。
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user