feat: implement ExternalInfoMiddleware and update routing for improved context handling

This commit is contained in:
mlogclub
2026-04-25 10:31:35 +08:00
parent 96168dc6fb
commit 1b3fc8159c
4 changed files with 10 additions and 24 deletions
+1 -1
Submodule docs updated: 2c062610c4...7e7bb92e1d
+3 -3
View File
@@ -96,10 +96,10 @@ func addRouter(app *iris.Application) {
mvc.Configure(app.Party("/api"), func(m *mvc.Application) {
m.Party("/auth").Handle(new(api.AuthController))
m.Party("/channel").Handle(new(api.ChannelController))
m.Party("/channel", middleware.ChannelContextMiddleware).Handle(new(api.ChannelController))
m.Party("/conversation", middleware.ChannelContextMiddleware).Handle(new(api.ConversationController))
m.Party("/message", middleware.ChannelContextMiddleware).Handle(new(api.MessageController))
m.Party("/conversation", middleware.ExternalInfoMiddleware).Handle(new(api.ConversationController))
m.Party("/message", middleware.ExternalInfoMiddleware).Handle(new(api.MessageController))
})
// mvc.Configure(app.Party("/api/open/im", middleware.ChannelContextMiddleware), func(m *mvc.Application) {
@@ -8,14 +8,13 @@ import (
"github.com/mlogclub/simple/web"
)
// ChannelContextMiddleware 校验 X-Channel-Id / channelId 对应启用 web 渠道
func ChannelContextMiddleware(ctx iris.Context) {
func ExternalInfoMiddleware(ctx iris.Context) {
ext, err := openidentity.GetExternalInfo(ctx)
if err != nil {
ctx.StopExecution()
_ = ctx.JSON(web.JsonError(err))
return
}
irisx.SetOpenImExternalInfo(ctx, ext)
irisx.SetExternalInfo(ctx, ext)
ctx.Next()
}
+4 -17
View File
@@ -9,28 +9,15 @@ import (
)
const (
ctxKeyOpenImChannel = "openImChannel"
ctxKeyOpenImExternalInfo = "openImExternalInfo"
ctxKeyExternalInfo = "externalInfo"
)
// func SetOpenImChannel(ctx iris.Context, channel *models.Channel) {
// ctx.Values().Set(ctxKeyOpenImChannel, channel)
// }
// // GetChannel 返回 OpenImContextMiddleware 注入的接入渠道(未走中间件时为 nil)。
// func GetChannel(ctx iris.Context) *models.Channel {
// v := ctx.Values().Get(ctxKeyOpenImChannel)
// channel, _ := v.(*models.Channel)
// return channel
// }
func SetOpenImExternalInfo(ctx iris.Context, ext *openidentity.ExternalInfo) {
ctx.Values().Set(ctxKeyOpenImExternalInfo, ext)
func SetExternalInfo(ctx iris.Context, ext *openidentity.ExternalInfo) {
ctx.Values().Set(ctxKeyExternalInfo, ext)
}
// GetExternalInfo 返回中间件注入的外部访客身份;仅 widget 子路径或未启用中间件时为 nil。
func GetExternalInfo(ctx iris.Context) *openidentity.ExternalInfo {
v := ctx.Values().Get(ctxKeyOpenImExternalInfo)
v := ctx.Values().Get(ctxKeyExternalInfo)
ext, _ := v.(*openidentity.ExternalInfo)
return ext
}