feat: support auto refresh token timeout When the user accesses.

This commit is contained in:
weloe
2023-10-31 23:20:33 +08:00
parent ddcf703835
commit 8a6c8eba30
2 changed files with 18 additions and 2 deletions

View File

@@ -384,7 +384,7 @@ func (e *Enforcer) LogoutById(id string, device ...string) error {
func (e *Enforcer) LogoutByToken(token string) error { func (e *Enforcer) LogoutByToken(token string) error {
var err error var err error
// delete token-id // delete token-id
id := e.GetIdByToken(token) id := e.getIdByToken(token)
if id == "" { if id == "" {
return errors.New("user not logged in") return errors.New("user not logged in")
} }
@@ -457,7 +457,13 @@ func (e *Enforcer) GetIdByToken(token string) string {
if token == "" { if token == "" {
return "" return ""
} }
return e.getIdByToken(token) loginId := e.getIdByToken(token)
// auto refresh timeout, When the user accesses
if loginId != "" && e.config.AutoRenew {
_ = e.updateTokenTimeout(token, e.config.Timeout)
_ = e.UpdateSessionTimeout(loginId, e.config.Timeout)
}
return loginId
} }
// IsLogin check if user logged in by token. // IsLogin check if user logged in by token.
@@ -593,6 +599,11 @@ func (e *Enforcer) UpdateSession(id string, session *model.Session) error {
return nil return nil
} }
func (e *Enforcer) UpdateSessionTimeout(id string, timeout int64) error {
err := e.notifyUpdateTimeout(id, timeout)
return err
}
func (e *Enforcer) GetTokenConfig() config.TokenConfig { func (e *Enforcer) GetTokenConfig() config.TokenConfig {
return e.config return e.config
} }

View File

@@ -141,6 +141,11 @@ func (e *Enforcer) updateIdByToken(tokenValue string, id string) error {
return err return err
} }
func (e *Enforcer) updateTokenTimeout(token string, timeout int64) error {
err := e.notifyUpdateTimeout(e.spliceTokenKey(token), timeout)
return err
}
func (e *Enforcer) setBanned(id string, service string, level int, time int64) error { func (e *Enforcer) setBanned(id string, service string, level int, time int64) error {
err := e.notifySetStr(e.spliceBannedKey(id, service), strconv.Itoa(level), time) err := e.notifySetStr(e.spliceBannedKey(id, service), strconv.Itoa(level), time)
return err return err