Golang轻量级登录认证库:Token-go

Golang轻量级登录认证库:Token-go GitHub - weloe/token-go: A login authentication library. Extensions:...

它有什么功能?

这个库专注于解决登录认证问题,例如:登录、多账户登录、共享令牌登录、令牌刷新、双令牌刷新、二维码登录、登出、踢出、封禁、二次认证、临时令牌、单点登录(SSO)… 使用这个库可以简化认证和授权业务,只需几行代码即可实现上述业务。

一些使用示例:

登录

token, err := enforcer.Login("1", tokenGo.NewHttpContext(req, w))

登出

err := enforcer.Logout(tokenGo.NewHttpContext(req, w))

封禁

err = enforcer.Banned("1", "test", 1, 100)

检查登录状态

b, err := enforcer.IsLogin(tokenGo.NewHttpContext(req, w))

特性

  • 封装了多种登录策略:多账户系统登录、同端登录、同端互斥登录、多端登录、多端互斥登录、扫码登录、SSO单点登录。
  • 封装了权限认证功能,例如:临时令牌、二级认证、角色认证、权限认证。
  • 封装了多种用户会话管理方式,例如:强制登出、踢人下线、账号封禁、令牌自动续期、双令牌续期。

手册

Home


更多关于Golang轻量级登录认证库:Token-go的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang轻量级登录认证库:Token-go的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Token-go 是一个设计精良的 Go 语言登录认证库,它通过高度抽象的接口和丰富的内置策略,将复杂的认证逻辑简化为几个直观的 API 调用。其核心优势在于对多种现代认证场景的深度封装,开发者无需从零构建状态管理、令牌刷新或会话冲突处理等底层机制。

以下是一些关键功能的代码示例,展示了其简洁性:

1. 登录与多账户系统

// 为同一用户ID在不同业务类型下创建独立的登录会话
token1, err := enforcer.Login("1001", tokenGo.NewHttpContext(req, w), tokenGo.WithLoginType("admin"))
token2, err := enforcer.Login("1001", tokenGo.NewHttpContext(req, w), tokenGo.WithLoginType("user"))
// 此时用户1001同时拥有admin和user两个独立的登录态,互不干扰

2. 同端互斥登录(后登录踢出前登录)

// 配置策略时启用
adapter := tokenGo.NewAdapter()
enforcer, err := tokenGo.NewEnforcer(adapter, tokenGo.WithLoginModel(tokenGo.LoginModelKick))
// 当同一用户在同一设备类型(如"web")再次登录时,之前的令牌会自动失效

3. 双令牌刷新(Access Token & Refresh Token)

// 登录时返回双令牌
loginRes, err := enforcer.LoginDoubleToken("1001", tokenGo.NewHttpContext(req, w))
// 使用Refresh Token刷新Access Token
newToken, err := enforcer.RefreshDoubleToken(refreshToken, tokenGo.NewHttpContext(req, w))

4. 权限与角色校验

// 校验当前会话是否拥有"article:delete"权限
hasPerm, err := enforcer.HasPermission("article:delete", tokenGo.NewHttpContext(req, w))
// 校验当前会话是否属于"admin"角色
hasRole, err := enforcer.HasRole("admin", tokenGo.NewHttpContext(req, w))

5. 二维码扫码登录

// 生成二维码场景
scene := "login_123"
qrCode, err := enforcer.CreateQrCode(scene)
// 用户扫码后确认登录
err := enforcer.QrCodeLogin(scene, "1001")
// 等待端通过长轮询或WebSocket获取登录状态变更
status, err := enforcer.GetQrCodeState(scene)

该库的架构清晰,通过Enforcer作为核心控制器,Adapter抽象数据存储(支持Redis、内存等),Context封装请求上下文。这种设计使得扩展自定义存储或集成到不同Web框架(如Gin、Echo)非常直接。

对于需要快速实现完整认证体系,又希望保持代码简洁和架构可控的项目,token-go 提供了一个生产可用的解决方案,避免了重复造轮子。其Wiki文档包含了完整的配置选项和高级用例,建议在实际集成时详细查阅。

回到顶部