| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package jwtx
- import (
- "errors"
- "github.com/5-say/go-tool/gin/jwtx/db/dao/query"
- "github.com/5-say/go-tool/logx"
- "github.com/gin-gonic/gin"
- )
- // jwt token 登出
- //
- // c *gin.Context
- // loginGroup string 登录的 token 分组
- // loginTerminal string 登录的 终端名称(当传值为“all”时,无视配置,强制登出所有终端)
- // accountID uint64 登录的 账户 ID
- //
- // e.g.
- //
- // jwtx.Singleton.Logout(c, "admin", "pc", 1)
- // jwtx.Singleton.Logout(c, "admin", "all", 1)
- func (s *SingletonT) Logout(c *gin.Context, loginGroup string, loginTerminal string, accountID uint64) (err error) {
- // 获取分组配置
- var (
- q = query.Use(s.DB[loginGroup])
- config = s.Config[loginGroup]
- )
- if config.SingleEnd || loginTerminal == "all" { // 强制单端登录
- if _, err := q.JwtxToken.WithContext(c).Where(
- q.JwtxToken.AccountID.Eq(accountID),
- q.JwtxToken.LoginGroup.Eq(loginGroup),
- ).Delete(); err != nil {
- logx.Error().Msg("强制单端登录,清除旧 token 失败 [sqlfail: " + err.Error() + "]")
- return errors.New("clear token fail")
- }
- } else { // 多端登录
- if _, err := q.JwtxToken.WithContext(c).Where(
- q.JwtxToken.AccountID.Eq(accountID),
- q.JwtxToken.LoginGroup.Eq(loginGroup),
- q.JwtxToken.LoginTerminal.Eq(loginTerminal),
- ).Delete(); err != nil {
- logx.Error().Msg("多端登录,清除旧 token 失败 [sqlfail: " + err.Error() + "]")
- return errors.New("clear token fail")
- }
- }
- return
- }
|