自定义认证端点
XYGo Admin 2026-04-22 2 次阅读
Auth Endpoint Factory、JWT独立端
如果你的扩展需要独立的用户认证体系(如供应商端、代理商端),可以使用 Auth Endpoint Factory 创建完全独立的 JWT 认证端点,无需修改核心代码。
创建认证端点
go
package shop
import (
"xygo/internal/addon"
"xygo/internal/library/token"
"xygo/addons/shop/controller"
"github.com/gogf/gf/v2/net/ghttp"
)
var supplierAuth = token.NewEndpoint(token.EndpointConfig{
Name: "supplier",
Secret: "",
Expires: 86400,
MultiLogin: true,
HeaderKey: "Authorization",
HeaderType: "Bearer",
LoginPaths: []string{"/supplier/auth/login"},
})
func init() {
addon.Register(addon.Module{
Name: "shop",
Mount: func(s *ghttp.Server) {
// 后台管理路由(使用系统 AdminAuth)
s.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(middleware.CORS, middleware.ResponseHandler, middleware.AdminAuth)
group.Bind(controller.NewAdminV1())
})
// 供应商端路由(使用自定义认证)
s.Group("/supplier", func(group *ghttp.RouterGroup) {
group.Middleware(middleware.CORS, middleware.ResponseHandler)
group.Middleware(supplierAuth.Middleware())
group.Bind(controller.NewSupplierV1())
})
},
})
}
登录接口实现
go
func SupplierLogin(ctx context.Context, username, password string) (tokenStr string, expiresIn int64, err error) {
supplierId := uint64(1001)
tokenStr, expiresIn, err = supplierAuth.Generate(ctx, supplierId, map[string]any{
"name": "供应商A",
"level": 2,
})
return
}
在业务中获取当前用户
go
import "xygo/internal/library/contexts"
func SomeLogic(ctx context.Context) {
user := contexts.GetEndpointUser(ctx, "supplier")
if user != nil {
fmt.Println("供应商ID:", user.Id)
fmt.Println("供应商名:", user.Data["name"])
}
userId := contexts.GetEndpointUserId(ctx, "supplier")
}
Endpoint 完整 API
| 方法 | 说明 |
|---|---|
NewEndpoint(cfg) |
创建端点实例 |
Generate(ctx, userId, data) |
生成 Token |
Parse(ctx, token) |
解析 Token |
Delete(ctx, token) |
删除 Token(登出) |
KickByUserId(ctx, userId) |
踢下线 |
Middleware() |
生成路由中间件 |
EndpointConfig 字段
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Name |
string | (必填) | 端点唯一标识 |
Secret |
string | 系统密钥 | JWT 签名密钥 |
Expires |
int64 | 系统默认 | Token 有效期(秒) |
MultiLogin |
bool | false | 是否允许多端登录 |
HeaderKey |
string | Authorization | 请求头名称 |
HeaderType |
string | Bearer | 请求头前缀 |
LoginPaths |
[]string | [] | 免鉴权路径列表 |