68 lines
3.7 KiB
Markdown
68 lines
3.7 KiB
Markdown
# 概括:
|
|
客户端交互的接口都在API服务中以http接口方式实现,而消息收发都在msggateway中以websocket协议实现。以下API定义在OpenIMAPI服务中,OpenIMAPI本身只起到接口转接的作用,具体的逻辑定义在下面的RPC服务,user&auth中。
|
|
# 接口
|
|
* 用户接口
|
|
```golang
|
|
u := NewUserApi(user.NewUserClient(userConn), client, cfg.Discovery.RpcService)
|
|
{
|
|
userRouterGroup := r.Group("/user")
|
|
userRouterGroup.POST("/user_register", u.UserRegister)
|
|
userRouterGroup.POST("/update_user_info", u.UpdateUserInfo)
|
|
userRouterGroup.POST("/update_user_info_ex", u.UpdateUserInfoEx)
|
|
userRouterGroup.POST("/set_global_msg_recv_opt", u.SetGlobalRecvMessageOpt)
|
|
userRouterGroup.POST("/get_users_info", u.GetUsersPublicInfo)
|
|
userRouterGroup.POST("/get_all_users_uid", u.GetAllUsersID)
|
|
userRouterGroup.POST("/account_check", u.AccountCheck)
|
|
userRouterGroup.POST("/get_users", u.GetUsers)
|
|
userRouterGroup.POST("/get_users_online_status", u.GetUsersOnlineStatus)
|
|
userRouterGroup.POST("/get_users_online_token_detail", u.GetUsersOnlineTokenDetail)
|
|
userRouterGroup.POST("/subscribe_users_status", u.SubscriberStatus)
|
|
userRouterGroup.POST("/get_users_status", u.GetUserStatus)
|
|
userRouterGroup.POST("/get_subscribe_users_status", u.GetSubscribeUsersStatus)
|
|
|
|
userRouterGroup.POST("/process_user_command_add", u.ProcessUserCommandAdd)
|
|
userRouterGroup.POST("/process_user_command_delete", u.ProcessUserCommandDelete)
|
|
userRouterGroup.POST("/process_user_command_update", u.ProcessUserCommandUpdate)
|
|
userRouterGroup.POST("/process_user_command_get", u.ProcessUserCommandGet)
|
|
userRouterGroup.POST("/process_user_command_get_all", u.ProcessUserCommandGetAll)
|
|
|
|
userRouterGroup.POST("/add_notification_account", u.AddNotificationAccount)
|
|
userRouterGroup.POST("/update_notification_account", u.UpdateNotificationAccountInfo)
|
|
userRouterGroup.POST("/search_notification_account", u.SearchNotificationAccount)
|
|
}
|
|
```
|
|
|
|
* 认证相关
|
|
```golang
|
|
{
|
|
a := NewAuthApi(pbAuth.NewAuthClient(authConn))
|
|
authRouterGroup := r.Group("/auth")
|
|
authRouterGroup.POST("/get_admin_token", a.GetAdminToken)
|
|
authRouterGroup.POST("/get_user_token", a.GetUserToken)
|
|
authRouterGroup.POST("/parse_token", a.ParseToken)
|
|
authRouterGroup.POST("/force_logout", a.ForceLogout)
|
|
}
|
|
```
|
|
# 认证逻辑
|
|

|
|
|
|
## Token说明
|
|
TokenKey格式:`前缀:用户ID:登录平台` = `UID_PID_TOKEN_STATUS:4834513665:Web`
|
|
TokenValue说明:{Token:TokenFlag}
|
|
TokenFlag取值如下,也就是说,TokenValue将以JsonMap的形式保存,最里可以看到最多4种情况
|
|
* NormalToken = 0
|
|
* InValidToken = 1
|
|
* KickedToken = 2
|
|
* ExpiredToken = 3
|
|
## AuthDatabase
|
|
Auth作为一个底层RPC服务,在启动是,会实例化AuthDatabase,Auth服务实现的4四认证相关接口,便是依赖authDatabase实现认证数据的管理。
|
|
authDatabase实现的四个方法如下,即操作上面Token的方法:
|
|
```
|
|
GetTokensWithoutError(ctx context.Context, userID string, platformID int) (map[string]int, error)
|
|
CreateToken(ctx context.Context, userID string, platformID int) (string, error)
|
|
BatchSetTokenMapByUidPid(ctx context.Context, tokens []string) error
|
|
SetTokenMapByUidPid(ctx context.Context, userID string, platformID int, m map[string]int) error
|
|
```
|
|
|
|
# 三方系统整合逻辑
|
|
即替换AuthDatabase的Token逻辑,比如改为依赖三方系统提供的Token获取与校验接口。当前出租屋的逻辑倒是权益之计,需要前端系统主动设置token.可以解决问题,但逻辑有漏洞。 |