mirror of
https://github.com/weloe/token-go.git
synced 2025-10-05 15:36:50 +08:00
refactor: extract deleteRedundantTokenSign method
This commit is contained in:
61
enforcer.go
61
enforcer.go
@@ -269,39 +269,12 @@ func (e *Enforcer) LoginByModel(id string, loginModel *model.Login, ctx ctx.Cont
|
|||||||
if device != "" && tokenConfig.DeviceMaxLoginCount != -1 {
|
if device != "" && tokenConfig.DeviceMaxLoginCount != -1 {
|
||||||
if session = e.GetSession(id); session != nil {
|
if session = e.GetSession(id); session != nil {
|
||||||
// get by login device
|
// get by login device
|
||||||
tokenSignList := session.GetFilterTokenSign(device)
|
tokenSignList := session.GetFilterTokenSignSlice(device)
|
||||||
if tokenSignList.Len() > int(tokenConfig.DeviceMaxLoginCount) {
|
if len(tokenSignList) > int(tokenConfig.DeviceMaxLoginCount) {
|
||||||
// if loginCount > maxLoginCount, logout account until single device Login count is equal to DeviceMaxLoginCount
|
err = e.deleteRedundantTokenSign(session, tokenConfig.DeviceMaxLoginCount)
|
||||||
for element := tokenSignList.Front(); element != nil; element = element.Next() {
|
|
||||||
if tokenSign, ok := element.Value.(*model.TokenSign); ok {
|
|
||||||
if session.TokenSignSize() > int(tokenConfig.DeviceMaxLoginCount) {
|
|
||||||
// delete tokenSign
|
|
||||||
tokenSignValue := tokenSign.Value
|
|
||||||
session.RemoveTokenSign(tokenSignValue)
|
|
||||||
err = e.UpdateSession(id, session)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
// delete token-id
|
|
||||||
err = e.deleteIdByToken(tokenSignValue)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
e.logger.Logout(e.loginType, id, tokenSignValue)
|
|
||||||
|
|
||||||
if e.watcher != nil {
|
|
||||||
e.watcher.Logout(e.loginType, id, tokenSignValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// check TokenSignList length, if length == 0, delete this session
|
|
||||||
if session != nil && session.TokenSignSize() == 0 {
|
|
||||||
err = e.DeleteSession(id)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -312,36 +285,10 @@ func (e *Enforcer) LoginByModel(id string, loginModel *model.Login, ctx ctx.Cont
|
|||||||
if session.TokenSignSize() <= int(tokenConfig.MaxLoginCount) {
|
if session.TokenSignSize() <= int(tokenConfig.MaxLoginCount) {
|
||||||
return tokenValue, nil
|
return tokenValue, nil
|
||||||
}
|
}
|
||||||
// logout account until loginCount == maxLoginCount if loginCount > maxLoginCount
|
err = e.deleteRedundantTokenSign(session, tokenConfig.MaxLoginCount)
|
||||||
for _, tokenSign := range session.TokenSignList {
|
|
||||||
if session.TokenSignSize() > int(tokenConfig.MaxLoginCount) {
|
|
||||||
// delete tokenSign
|
|
||||||
tokenSignValue := tokenSign.Value
|
|
||||||
session.RemoveTokenSign(tokenSignValue)
|
|
||||||
err = e.UpdateSession(id, session)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
// delete token-id
|
|
||||||
err = e.deleteIdByToken(tokenSignValue)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
e.logger.Logout(e.loginType, id, tokenSignValue)
|
|
||||||
|
|
||||||
if e.watcher != nil {
|
|
||||||
e.watcher.Logout(e.loginType, id, tokenSignValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// check TokenSignList length, if length == 0, delete this session
|
|
||||||
if session != nil && session.TokenSignSize() == 0 {
|
|
||||||
err = e.DeleteSession(id)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -103,6 +103,43 @@ func (e *Enforcer) ResponseToken(tokenValue string, loginModel *model.Login, ctx
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete the tokens to a specified number
|
||||||
|
func (e *Enforcer) deleteRedundantTokenSign(session *model.Session, number int16) error {
|
||||||
|
var err error
|
||||||
|
id := session.LoginId
|
||||||
|
// logout account until loginCount == maxLoginCount if loginCount > maxLoginCount
|
||||||
|
for _, tokenSign := range session.TokenSignList {
|
||||||
|
if session.TokenSignSize() > int(number) {
|
||||||
|
// delete tokenSign
|
||||||
|
tokenSignValue := tokenSign.Value
|
||||||
|
session.RemoveTokenSign(tokenSignValue)
|
||||||
|
err = e.UpdateSession(id, session)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// delete token-id
|
||||||
|
err = e.deleteIdByToken(tokenSignValue)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
e.logger.Logout(e.loginType, id, tokenSignValue)
|
||||||
|
|
||||||
|
if e.watcher != nil {
|
||||||
|
e.watcher.Logout(e.loginType, id, tokenSignValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check TokenSignList length, if length == 0, delete this session
|
||||||
|
if session != nil && session.TokenSignSize() == 0 {
|
||||||
|
err = e.DeleteSession(id)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// checkId check id
|
// checkId check id
|
||||||
func (e *Enforcer) checkId(str string) (bool, error) {
|
func (e *Enforcer) checkId(str string) (bool, error) {
|
||||||
i, err := strconv.Atoi(str)
|
i, err := strconv.Atoi(str)
|
||||||
|
Reference in New Issue
Block a user