@
jedrek 非常感谢你的帮助,借助 dgrijalva/jwt-go,基本实现了需求。以下是我的解决方案。如果你有空的话,并且愿意提出一些意见,那将是非常期待的。
首先定义一个结构体,存储用户的 token 信息
type TokenManager struct {
Lock sync.Mutex
//map[user] map[token]user
Token map[string]map[string]string
}
然后定义一个该结构体的方法,删除已经过期的 token
func (manager *TokenManager) DeleteTokenNotValid() {
//删除过期的 Token
...
return
}
定义一个全局的 TokenManager 结构体变量
var TokenStore=TokenManager{}
主函数
func main() {
//开启协程,删除已经过期的 token
go func() {
for true {
TokenStore.DeleteTokenNotValid()
}
}()
//业务处理函数
...
}
登录处理函数
func login(c echo.Context) error {
//如果请求携带有效的 token,则跳转至首页
...
//如果用户的 token 数量大于等于 4,则禁止登录
...
//创建用户的 token,并保存至 TokenStore.Token[user]
...
}
注销处理函数
func logout(c echo.Context) error {
//删除请求携带的有效 token
...
}