feat: user logout
CI / changes (push) Successful in 1m30s
CI / ad (push) Successful in 0s
CI / admin (push) Successful in 0s
CI / aiserver (push) Successful in 0s
CI / analysis (push) Successful in 35s
CI / bff (push) Successful in 19s
CI / chore (push) Successful in 1s
CI / equipment (push) Successful in 0s
CI / express (push) Successful in 0s
CI / factory (push) Successful in 0s
CI / message (push) Successful in 0s
CI / order (push) Successful in 0s
CI / payment (push) Successful in 0s
CI / percutaneous (push) Successful in 1s
CI / product (push) Successful in 0s
CI / record (push) Successful in 1s
CI / sale (push) Successful in 0s
CI / store (push) Successful in 0s
CI / support (push) Successful in 0s
CI / task (push) Successful in 0s
CI / user (push) Successful in 24s
CI / water (push) Successful in 0s
CI / wecom (push) Successful in 0s
CI / ws (push) Successful in 0s

This commit is contained in:
zzw
2026-11-04 14:51:39 +08:00
parent dee82c5aa7
commit 582174a8bd
8 changed files with 266 additions and 83 deletions
+121 -80
View File
@@ -2179,6 +2179,42 @@ func (*InfoReq) Descriptor() ([]byte, []int) {
return file_user_user_proto_rawDescGZIP(), []int{34}
}
type LogoutReq struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *LogoutReq) Reset() {
*x = LogoutReq{}
mi := &file_user_user_proto_msgTypes[35]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *LogoutReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LogoutReq) ProtoMessage() {}
func (x *LogoutReq) ProtoReflect() protoreflect.Message {
mi := &file_user_user_proto_msgTypes[35]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LogoutReq.ProtoReflect.Descriptor instead.
func (*LogoutReq) Descriptor() ([]byte, []int) {
return file_user_user_proto_rawDescGZIP(), []int{35}
}
type UpdateReq struct {
state protoimpl.MessageState `protogen:"open.v1"`
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
@@ -2193,7 +2229,7 @@ type UpdateReq struct {
func (x *UpdateReq) Reset() {
*x = UpdateReq{}
mi := &file_user_user_proto_msgTypes[35]
mi := &file_user_user_proto_msgTypes[36]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2205,7 +2241,7 @@ func (x *UpdateReq) String() string {
func (*UpdateReq) ProtoMessage() {}
func (x *UpdateReq) ProtoReflect() protoreflect.Message {
mi := &file_user_user_proto_msgTypes[35]
mi := &file_user_user_proto_msgTypes[36]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2218,7 +2254,7 @@ func (x *UpdateReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateReq.ProtoReflect.Descriptor instead.
func (*UpdateReq) Descriptor() ([]byte, []int) {
return file_user_user_proto_rawDescGZIP(), []int{35}
return file_user_user_proto_rawDescGZIP(), []int{36}
}
func (x *UpdateReq) GetName() string {
@@ -2273,7 +2309,7 @@ type PasswordReq struct {
func (x *PasswordReq) Reset() {
*x = PasswordReq{}
mi := &file_user_user_proto_msgTypes[36]
mi := &file_user_user_proto_msgTypes[37]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2285,7 +2321,7 @@ func (x *PasswordReq) String() string {
func (*PasswordReq) ProtoMessage() {}
func (x *PasswordReq) ProtoReflect() protoreflect.Message {
mi := &file_user_user_proto_msgTypes[36]
mi := &file_user_user_proto_msgTypes[37]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2298,7 +2334,7 @@ func (x *PasswordReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use PasswordReq.ProtoReflect.Descriptor instead.
func (*PasswordReq) Descriptor() ([]byte, []int) {
return file_user_user_proto_rawDescGZIP(), []int{36}
return file_user_user_proto_rawDescGZIP(), []int{37}
}
func (x *PasswordReq) GetPassword() string {
@@ -2326,7 +2362,7 @@ type ClientReq struct {
func (x *ClientReq) Reset() {
*x = ClientReq{}
mi := &file_user_user_proto_msgTypes[37]
mi := &file_user_user_proto_msgTypes[38]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2338,7 +2374,7 @@ func (x *ClientReq) String() string {
func (*ClientReq) ProtoMessage() {}
func (x *ClientReq) ProtoReflect() protoreflect.Message {
mi := &file_user_user_proto_msgTypes[37]
mi := &file_user_user_proto_msgTypes[38]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2351,7 +2387,7 @@ func (x *ClientReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use ClientReq.ProtoReflect.Descriptor instead.
func (*ClientReq) Descriptor() ([]byte, []int) {
return file_user_user_proto_rawDescGZIP(), []int{37}
return file_user_user_proto_rawDescGZIP(), []int{38}
}
func (x *ClientReq) GetName() string {
@@ -2384,7 +2420,7 @@ type GenerateQrcodeReq struct {
func (x *GenerateQrcodeReq) Reset() {
*x = GenerateQrcodeReq{}
mi := &file_user_user_proto_msgTypes[38]
mi := &file_user_user_proto_msgTypes[39]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2396,7 +2432,7 @@ func (x *GenerateQrcodeReq) String() string {
func (*GenerateQrcodeReq) ProtoMessage() {}
func (x *GenerateQrcodeReq) ProtoReflect() protoreflect.Message {
mi := &file_user_user_proto_msgTypes[38]
mi := &file_user_user_proto_msgTypes[39]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2409,7 +2445,7 @@ func (x *GenerateQrcodeReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use GenerateQrcodeReq.ProtoReflect.Descriptor instead.
func (*GenerateQrcodeReq) Descriptor() ([]byte, []int) {
return file_user_user_proto_rawDescGZIP(), []int{38}
return file_user_user_proto_rawDescGZIP(), []int{39}
}
func (x *GenerateQrcodeReq) GetClientCode() string {
@@ -2428,7 +2464,7 @@ type QrcodeScanReq struct {
func (x *QrcodeScanReq) Reset() {
*x = QrcodeScanReq{}
mi := &file_user_user_proto_msgTypes[39]
mi := &file_user_user_proto_msgTypes[40]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2440,7 +2476,7 @@ func (x *QrcodeScanReq) String() string {
func (*QrcodeScanReq) ProtoMessage() {}
func (x *QrcodeScanReq) ProtoReflect() protoreflect.Message {
mi := &file_user_user_proto_msgTypes[39]
mi := &file_user_user_proto_msgTypes[40]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2453,7 +2489,7 @@ func (x *QrcodeScanReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use QrcodeScanReq.ProtoReflect.Descriptor instead.
func (*QrcodeScanReq) Descriptor() ([]byte, []int) {
return file_user_user_proto_rawDescGZIP(), []int{39}
return file_user_user_proto_rawDescGZIP(), []int{40}
}
func (x *QrcodeScanReq) GetSessionId() string {
@@ -2473,7 +2509,7 @@ type QrcodeLoginReq struct {
func (x *QrcodeLoginReq) Reset() {
*x = QrcodeLoginReq{}
mi := &file_user_user_proto_msgTypes[40]
mi := &file_user_user_proto_msgTypes[41]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2485,7 +2521,7 @@ func (x *QrcodeLoginReq) String() string {
func (*QrcodeLoginReq) ProtoMessage() {}
func (x *QrcodeLoginReq) ProtoReflect() protoreflect.Message {
mi := &file_user_user_proto_msgTypes[40]
mi := &file_user_user_proto_msgTypes[41]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2498,7 +2534,7 @@ func (x *QrcodeLoginReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use QrcodeLoginReq.ProtoReflect.Descriptor instead.
func (*QrcodeLoginReq) Descriptor() ([]byte, []int) {
return file_user_user_proto_rawDescGZIP(), []int{40}
return file_user_user_proto_rawDescGZIP(), []int{41}
}
func (x *QrcodeLoginReq) GetSessionId() string {
@@ -2685,7 +2721,8 @@ const file_user_user_proto_rawDesc = "" +
"\n" +
"new_mobile\x18\x02 \x01(\tR\tnewMobile\x12\x19\n" +
"\bsms_code\x18\x03 \x01(\tR\asmsCode\"\t\n" +
"\aInfoReq\"\xa0\x01\n" +
"\aInfoReq\"\v\n" +
"\tLogoutReq\"\xa0\x01\n" +
"\tUpdateReq\x12\x12\n" +
"\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" +
"\x06avatar\x18\x02 \x01(\tR\x06avatar\x12\x16\n" +
@@ -2709,9 +2746,10 @@ const file_user_user_proto_rawDesc = "" +
"\x0eQrcodeLoginReq\x12\x1d\n" +
"\n" +
"session_id\x18\x01 \x01(\tR\tsessionId\x12\x12\n" +
"\x04type\x18\x02 \x01(\x05R\x04type2\xa0\x10\n" +
"\x04type\x18\x02 \x01(\x05R\x04type2\xeb\x10\n" +
"\x04User\x12F\n" +
"\x05Login\x12\x0e.user.LoginReq\x1a\x0e.user.Response\"\x1d\x82\xd3\xe4\x93\x02\x17:\x01*\"\x12/api/v3/user/login\x12b\n" +
"\x05Login\x12\x0e.user.LoginReq\x1a\x0e.user.Response\"\x1d\x82\xd3\xe4\x93\x02\x17:\x01*\"\x12/api/v3/user/login\x12I\n" +
"\x06Logout\x12\x0f.user.LogoutReq\x1a\x0e.user.Response\"\x1e\x82\xd3\xe4\x93\x02\x18:\x01*\"\x13/api/v3/user/logout\x12b\n" +
"\x0eGenerateQrcode\x12\x17.user.GenerateQrcodeReq\x1a\x0e.user.Response\"'\x82\xd3\xe4\x93\x02!:\x01*\"\x1c/api/v3/user/qrcode/generate\x12V\n" +
"\n" +
"QrcodeScan\x12\x13.user.QrcodeScanReq\x1a\x0e.user.Response\"#\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/api/v3/user/qrcode/scan\x12Y\n" +
@@ -2752,7 +2790,7 @@ func file_user_user_proto_rawDescGZIP() []byte {
return file_user_user_proto_rawDescData
}
var file_user_user_proto_msgTypes = make([]protoimpl.MessageInfo, 41)
var file_user_user_proto_msgTypes = make([]protoimpl.MessageInfo, 42)
var file_user_user_proto_goTypes = []any{
(*Response)(nil), // 0: user.Response
(*LoginReq)(nil), // 1: user.LoginReq
@@ -2789,69 +2827,72 @@ var file_user_user_proto_goTypes = []any{
(*BindMobileReq)(nil), // 32: user.BindMobileReq
(*RebindMobileReq)(nil), // 33: user.RebindMobileReq
(*InfoReq)(nil), // 34: user.InfoReq
(*UpdateReq)(nil), // 35: user.UpdateReq
(*PasswordReq)(nil), // 36: user.PasswordReq
(*ClientReq)(nil), // 37: user.ClientReq
(*GenerateQrcodeReq)(nil), // 38: user.GenerateQrcodeReq
(*QrcodeScanReq)(nil), // 39: user.QrcodeScanReq
(*QrcodeLoginReq)(nil), // 40: user.QrcodeLoginReq
(*LogoutReq)(nil), // 35: user.LogoutReq
(*UpdateReq)(nil), // 36: user.UpdateReq
(*PasswordReq)(nil), // 37: user.PasswordReq
(*ClientReq)(nil), // 38: user.ClientReq
(*GenerateQrcodeReq)(nil), // 39: user.GenerateQrcodeReq
(*QrcodeScanReq)(nil), // 40: user.QrcodeScanReq
(*QrcodeLoginReq)(nil), // 41: user.QrcodeLoginReq
}
var file_user_user_proto_depIdxs = []int32{
7, // 0: user.InternalUsersByIdsData.items:type_name -> user.UserBriefItem
14, // 1: user.InternalDeleteUserData.clients:type_name -> user.InternalDeleteUserClient
27, // 2: user.InternalUsersByBizData.items:type_name -> user.BizUserItem
1, // 3: user.User.Login:input_type -> user.LoginReq
38, // 4: user.User.GenerateQrcode:input_type -> user.GenerateQrcodeReq
39, // 5: user.User.QrcodeScan:input_type -> user.QrcodeScanReq
40, // 6: user.User.QrcodeLogin:input_type -> user.QrcodeLoginReq
34, // 7: user.User.Info:input_type -> user.InfoReq
35, // 8: user.User.Update:input_type -> user.UpdateReq
36, // 9: user.User.Password:input_type -> user.PasswordReq
31, // 10: user.User.GetOpenid:input_type -> user.GetOpenidReq
32, // 11: user.User.BindMobile:input_type -> user.BindMobileReq
33, // 12: user.User.RebindMobile:input_type -> user.RebindMobileReq
37, // 13: user.User.Client:input_type -> user.ClientReq
2, // 14: user.User.UserItems:input_type -> user.UserItemsReq
3, // 15: user.User.UserStatus:input_type -> user.UserStatusReq
4, // 16: user.User.InternalCreate:input_type -> user.InternalCreateReq
16, // 17: user.User.InternalCheckCreate:input_type -> user.InternalCheckCreateReq
18, // 18: user.User.InternalCheckUpdate:input_type -> user.InternalCheckUpdateReq
20, // 19: user.User.InternalUpdate:input_type -> user.InternalUpdateReq
6, // 20: user.User.InternalUsersByIds:input_type -> user.InternalUsersByIdsReq
9, // 21: user.User.InternalUpdateMobile:input_type -> user.InternalUpdateMobileReq
11, // 22: user.User.InternalRevokeBizClient:input_type -> user.InternalRevokeBizClientReq
13, // 23: user.User.InternalDeleteUser:input_type -> user.InternalDeleteUserReq
22, // 24: user.User.InternalGetUserInfo:input_type -> user.InternalGetUserInfoReq
24, // 25: user.User.InternalVerifyPassword:input_type -> user.InternalVerifyPasswordReq
26, // 26: user.User.InternalUsersByBiz:input_type -> user.InternalUsersByBizReq
29, // 27: user.User.InternalLoginByUserId:input_type -> user.InternalLoginByUserIdReq
0, // 28: user.User.Login:output_type -> user.Response
0, // 29: user.User.GenerateQrcode:output_type -> user.Response
0, // 30: user.User.QrcodeScan:output_type -> user.Response
0, // 31: user.User.QrcodeLogin:output_type -> user.Response
0, // 32: user.User.Info:output_type -> user.Response
0, // 33: user.User.Update:output_type -> user.Response
0, // 34: user.User.Password:output_type -> user.Response
0, // 35: user.User.GetOpenid:output_type -> user.Response
0, // 36: user.User.BindMobile:output_type -> user.Response
0, // 37: user.User.RebindMobile:output_type -> user.Response
0, // 38: user.User.Client:output_type -> user.Response
0, // 39: user.User.UserItems:output_type -> user.Response
0, // 40: user.User.UserStatus:output_type -> user.Response
5, // 41: user.User.InternalCreate:output_type -> user.InternalCreateData
17, // 42: user.User.InternalCheckCreate:output_type -> user.InternalCheckCreateData
19, // 43: user.User.InternalCheckUpdate:output_type -> user.InternalCheckUpdateData
21, // 44: user.User.InternalUpdate:output_type -> user.InternalUpdateData
8, // 45: user.User.InternalUsersByIds:output_type -> user.InternalUsersByIdsData
10, // 46: user.User.InternalUpdateMobile:output_type -> user.InternalUpdateMobileData
12, // 47: user.User.InternalRevokeBizClient:output_type -> user.InternalRevokeBizClientData
15, // 48: user.User.InternalDeleteUser:output_type -> user.InternalDeleteUserData
23, // 49: user.User.InternalGetUserInfo:output_type -> user.InternalGetUserInfoData
25, // 50: user.User.InternalVerifyPassword:output_type -> user.InternalVerifyPasswordData
28, // 51: user.User.InternalUsersByBiz:output_type -> user.InternalUsersByBizData
30, // 52: user.User.InternalLoginByUserId:output_type -> user.InternalLoginByUserIdData
28, // [28:53] is the sub-list for method output_type
3, // [3:28] is the sub-list for method input_type
35, // 4: user.User.Logout:input_type -> user.LogoutReq
39, // 5: user.User.GenerateQrcode:input_type -> user.GenerateQrcodeReq
40, // 6: user.User.QrcodeScan:input_type -> user.QrcodeScanReq
41, // 7: user.User.QrcodeLogin:input_type -> user.QrcodeLoginReq
34, // 8: user.User.Info:input_type -> user.InfoReq
36, // 9: user.User.Update:input_type -> user.UpdateReq
37, // 10: user.User.Password:input_type -> user.PasswordReq
31, // 11: user.User.GetOpenid:input_type -> user.GetOpenidReq
32, // 12: user.User.BindMobile:input_type -> user.BindMobileReq
33, // 13: user.User.RebindMobile:input_type -> user.RebindMobileReq
38, // 14: user.User.Client:input_type -> user.ClientReq
2, // 15: user.User.UserItems:input_type -> user.UserItemsReq
3, // 16: user.User.UserStatus:input_type -> user.UserStatusReq
4, // 17: user.User.InternalCreate:input_type -> user.InternalCreateReq
16, // 18: user.User.InternalCheckCreate:input_type -> user.InternalCheckCreateReq
18, // 19: user.User.InternalCheckUpdate:input_type -> user.InternalCheckUpdateReq
20, // 20: user.User.InternalUpdate:input_type -> user.InternalUpdateReq
6, // 21: user.User.InternalUsersByIds:input_type -> user.InternalUsersByIdsReq
9, // 22: user.User.InternalUpdateMobile:input_type -> user.InternalUpdateMobileReq
11, // 23: user.User.InternalRevokeBizClient:input_type -> user.InternalRevokeBizClientReq
13, // 24: user.User.InternalDeleteUser:input_type -> user.InternalDeleteUserReq
22, // 25: user.User.InternalGetUserInfo:input_type -> user.InternalGetUserInfoReq
24, // 26: user.User.InternalVerifyPassword:input_type -> user.InternalVerifyPasswordReq
26, // 27: user.User.InternalUsersByBiz:input_type -> user.InternalUsersByBizReq
29, // 28: user.User.InternalLoginByUserId:input_type -> user.InternalLoginByUserIdReq
0, // 29: user.User.Login:output_type -> user.Response
0, // 30: user.User.Logout:output_type -> user.Response
0, // 31: user.User.GenerateQrcode:output_type -> user.Response
0, // 32: user.User.QrcodeScan:output_type -> user.Response
0, // 33: user.User.QrcodeLogin:output_type -> user.Response
0, // 34: user.User.Info:output_type -> user.Response
0, // 35: user.User.Update:output_type -> user.Response
0, // 36: user.User.Password:output_type -> user.Response
0, // 37: user.User.GetOpenid:output_type -> user.Response
0, // 38: user.User.BindMobile:output_type -> user.Response
0, // 39: user.User.RebindMobile:output_type -> user.Response
0, // 40: user.User.Client:output_type -> user.Response
0, // 41: user.User.UserItems:output_type -> user.Response
0, // 42: user.User.UserStatus:output_type -> user.Response
5, // 43: user.User.InternalCreate:output_type -> user.InternalCreateData
17, // 44: user.User.InternalCheckCreate:output_type -> user.InternalCheckCreateData
19, // 45: user.User.InternalCheckUpdate:output_type -> user.InternalCheckUpdateData
21, // 46: user.User.InternalUpdate:output_type -> user.InternalUpdateData
8, // 47: user.User.InternalUsersByIds:output_type -> user.InternalUsersByIdsData
10, // 48: user.User.InternalUpdateMobile:output_type -> user.InternalUpdateMobileData
12, // 49: user.User.InternalRevokeBizClient:output_type -> user.InternalRevokeBizClientData
15, // 50: user.User.InternalDeleteUser:output_type -> user.InternalDeleteUserData
23, // 51: user.User.InternalGetUserInfo:output_type -> user.InternalGetUserInfoData
25, // 52: user.User.InternalVerifyPassword:output_type -> user.InternalVerifyPasswordData
28, // 53: user.User.InternalUsersByBiz:output_type -> user.InternalUsersByBizData
30, // 54: user.User.InternalLoginByUserId:output_type -> user.InternalLoginByUserIdData
29, // [29:55] is the sub-list for method output_type
3, // [3:29] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
@@ -2868,7 +2909,7 @@ func file_user_user_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_user_user_proto_rawDesc), len(file_user_user_proto_rawDesc)),
NumEnums: 0,
NumMessages: 41,
NumMessages: 42,
NumExtensions: 0,
NumServices: 1,
},
+38
View File
@@ -20,6 +20,7 @@ const _ = grpc.SupportPackageIsVersion9
const (
User_Login_FullMethodName = "/user.User/Login"
User_Logout_FullMethodName = "/user.User/Logout"
User_GenerateQrcode_FullMethodName = "/user.User/GenerateQrcode"
User_QrcodeScan_FullMethodName = "/user.User/QrcodeScan"
User_QrcodeLogin_FullMethodName = "/user.User/QrcodeLogin"
@@ -51,6 +52,7 @@ const (
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type UserClient interface {
Login(ctx context.Context, in *LoginReq, opts ...grpc.CallOption) (*Response, error)
Logout(ctx context.Context, in *LogoutReq, opts ...grpc.CallOption) (*Response, error)
GenerateQrcode(ctx context.Context, in *GenerateQrcodeReq, opts ...grpc.CallOption) (*Response, error)
QrcodeScan(ctx context.Context, in *QrcodeScanReq, opts ...grpc.CallOption) (*Response, error)
QrcodeLogin(ctx context.Context, in *QrcodeLoginReq, opts ...grpc.CallOption) (*Response, error)
@@ -95,6 +97,16 @@ func (c *userClient) Login(ctx context.Context, in *LoginReq, opts ...grpc.CallO
return out, nil
}
func (c *userClient) Logout(ctx context.Context, in *LogoutReq, opts ...grpc.CallOption) (*Response, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(Response)
err := c.cc.Invoke(ctx, User_Logout_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *userClient) GenerateQrcode(ctx context.Context, in *GenerateQrcodeReq, opts ...grpc.CallOption) (*Response, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(Response)
@@ -340,6 +352,7 @@ func (c *userClient) InternalLoginByUserId(ctx context.Context, in *InternalLogi
// for forward compatibility.
type UserServer interface {
Login(context.Context, *LoginReq) (*Response, error)
Logout(context.Context, *LogoutReq) (*Response, error)
GenerateQrcode(context.Context, *GenerateQrcodeReq) (*Response, error)
QrcodeScan(context.Context, *QrcodeScanReq) (*Response, error)
QrcodeLogin(context.Context, *QrcodeLoginReq) (*Response, error)
@@ -377,6 +390,9 @@ type UnimplementedUserServer struct{}
func (UnimplementedUserServer) Login(context.Context, *LoginReq) (*Response, error) {
return nil, status.Error(codes.Unimplemented, "method Login not implemented")
}
func (UnimplementedUserServer) Logout(context.Context, *LogoutReq) (*Response, error) {
return nil, status.Error(codes.Unimplemented, "method Logout not implemented")
}
func (UnimplementedUserServer) GenerateQrcode(context.Context, *GenerateQrcodeReq) (*Response, error) {
return nil, status.Error(codes.Unimplemented, "method GenerateQrcode not implemented")
}
@@ -488,6 +504,24 @@ func _User_Login_Handler(srv interface{}, ctx context.Context, dec func(interfac
return interceptor(ctx, in, info, handler)
}
func _User_Logout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(LogoutReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(UserServer).Logout(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: User_Logout_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(UserServer).Logout(ctx, req.(*LogoutReq))
}
return interceptor(ctx, in, info, handler)
}
func _User_GenerateQrcode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GenerateQrcodeReq)
if err := dec(in); err != nil {
@@ -931,6 +965,10 @@ var User_ServiceDesc = grpc.ServiceDesc{
MethodName: "Login",
Handler: _User_Login_Handler,
},
{
MethodName: "Logout",
Handler: _User_Logout_Handler,
},
{
MethodName: "GenerateQrcode",
Handler: _User_GenerateQrcode_Handler,
BIN
View File
Binary file not shown.
+8
View File
@@ -12,6 +12,12 @@ service User {
body: "*"
};
}
rpc Logout(LogoutReq) returns (Response) {
option (google.api.http) = {
post: "/api/v3/user/logout"
body: "*"
};
}
rpc GenerateQrcode(GenerateQrcodeReq) returns (Response) {
option (google.api.http) = {
post: "/api/v3/user/qrcode/generate"
@@ -316,6 +322,8 @@ message RebindMobileReq {
message InfoReq {}
message LogoutReq {}
message UpdateReq {
string name = 1;
string avatar = 2;
@@ -67,9 +67,6 @@ func (l *UserStatusLogic) syncRegisteredFromUser(bizId, userId int64, isRegister
if isRegistered != uint8(utils.StatusFail) {
return isRegistered
}
if userId < utils.NumberOne || l.svcCtx.UserSvcName == utils.StringEmpty {
return isRegistered
}
cli, err := svc.GetRpcClient(l.svcCtx.UserSvcName)
if err != nil {
@@ -0,0 +1,87 @@
package logic
import (
"context"
"strconv"
"lone-services/pkg/redis"
"lone-services/pkg/utils"
user "lone-services/rpc/user/pb"
"lone-services/services/user/internal/dao"
"lone-services/services/user/internal/svc"
jsoniter "github.com/json-iterator/go"
"github.com/zeromicro/go-zero/core/logx"
)
type LogoutLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewLogoutLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LogoutLogic {
return &LogoutLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *LogoutLogic) Logout(in *user.LogoutReq) (*user.Response, error) {
loginUser := utils.GetUserFromCtx(l.ctx)
if loginUser.ID < utils.NumberOne {
return failResponse(utils.ErrorNoLoginInfo), nil
}
loginType, typeErr := resolveLoginCacheType(loginUser)
if typeErr != nil {
l.Errorf("logout resolve login type: %v", typeErr)
return failResponse(utils.Fail), nil
}
if loginType == utils.StringEmpty {
return outResponse(utils.ErrorParams, "无法识别登录类型"), nil
}
redisKeysKey := utils.GetLoginKeysKey(loginType, strconv.FormatInt(loginUser.ID, utils.NumberTen))
oldAuth, oldErr := redis.Client.Get(l.ctx, redisKeysKey).Result()
if oldErr != nil {
return failResponse(utils.ErrorNoLoginInfo), nil
}
var loginInfo utils.LoginRedis
if err := jsoniter.Unmarshal([]byte(oldAuth), &loginInfo); err != nil {
return failResponse(utils.ErrorNoLoginInfo), nil
}
if len(loginInfo.Token) > utils.NumberOne {
_ = redis.Client.Del(l.ctx, utils.GetLoginKey(loginType, loginInfo.Token)).Err()
}
if len(loginInfo.Refresh) > utils.NumberOne {
_ = redis.Client.Del(l.ctx, utils.GetLoginRefreshKey(loginType, loginInfo.Refresh)).Err()
}
_ = redis.Client.Del(l.ctx, redisKeysKey).Err()
return okResponse(utils.NumberOne), nil
}
func resolveLoginCacheType(loginUser utils.UserInfo) (string, error) {
if loginUser.ClientCode != utils.StringEmpty {
client, err := loadEnabledClient(loginUser.ClientCode)
if err != nil {
return utils.StringEmpty, err
}
return loginCacheType(client), nil
}
switch loginUser.Type {
case dao.TypeSale:
return utils.LoginTypeSale, nil
case dao.TypeStore:
return utils.LoginTypeStore, nil
case dao.TypeUser:
return utils.LoginTypeUser, nil
default:
return utils.StringEmpty, nil
}
}
@@ -28,6 +28,11 @@ func (s *UserServer) Login(ctx context.Context, in *user.LoginReq) (*user.Respon
return l.Login(in)
}
func (s *UserServer) Logout(ctx context.Context, in *user.LogoutReq) (*user.Response, error) {
l := logic.NewLogoutLogic(ctx, s.svcCtx)
return l.Logout(in)
}
func (s *UserServer) GenerateQrcode(ctx context.Context, in *user.GenerateQrcodeReq) (*user.Response, error) {
l := logic.NewGenerateQrcodeLogic(ctx, s.svcCtx)
return l.GenerateQrcode(in)
+7
View File
@@ -46,6 +46,7 @@ type (
InternalVerifyPasswordData = user.InternalVerifyPasswordData
InternalVerifyPasswordReq = user.InternalVerifyPasswordReq
LoginReq = user.LoginReq
LogoutReq = user.LogoutReq
PasswordReq = user.PasswordReq
QrcodeLoginReq = user.QrcodeLoginReq
QrcodeScanReq = user.QrcodeScanReq
@@ -58,6 +59,7 @@ type (
User interface {
Login(ctx context.Context, in *LoginReq, opts ...grpc.CallOption) (*Response, error)
Logout(ctx context.Context, in *LogoutReq, opts ...grpc.CallOption) (*Response, error)
GenerateQrcode(ctx context.Context, in *GenerateQrcodeReq, opts ...grpc.CallOption) (*Response, error)
QrcodeScan(ctx context.Context, in *QrcodeScanReq, opts ...grpc.CallOption) (*Response, error)
QrcodeLogin(ctx context.Context, in *QrcodeLoginReq, opts ...grpc.CallOption) (*Response, error)
@@ -100,6 +102,11 @@ func (m *defaultUser) Login(ctx context.Context, in *LoginReq, opts ...grpc.Call
return client.Login(ctx, in, opts...)
}
func (m *defaultUser) Logout(ctx context.Context, in *LogoutReq, opts ...grpc.CallOption) (*Response, error) {
client := user.NewUserClient(m.cli.Conn())
return client.Logout(ctx, in, opts...)
}
func (m *defaultUser) GenerateQrcode(ctx context.Context, in *GenerateQrcodeReq, opts ...grpc.CallOption) (*Response, error) {
client := user.NewUserClient(m.cli.Conn())
return client.GenerateQrcode(ctx, in, opts...)