feat: update cache; fix: user logout
This commit is contained in:
@ -9,6 +9,7 @@ import (
|
||||
"ultone/internal/controller"
|
||||
"ultone/internal/database/cache"
|
||||
"ultone/internal/database/db"
|
||||
"ultone/internal/log"
|
||||
"ultone/internal/middleware/oplog"
|
||||
"ultone/internal/model"
|
||||
"ultone/internal/opt"
|
||||
@ -75,26 +76,27 @@ func AuthLogin(c *nf.Ctx) error {
|
||||
|
||||
if !opt.MultiLogin {
|
||||
var (
|
||||
last = fmt.Sprintf("%s:user:last_token:%d", opt.CachePrefix, target.Id)
|
||||
bs []byte
|
||||
lastKey = fmt.Sprintf("%s:user:last_token:%d", opt.CachePrefix, target.Id)
|
||||
lastToken string
|
||||
)
|
||||
|
||||
// 获取之前的 token
|
||||
if bs, err = cache.Client.Get(tool.Timeout(3), last); err == nil {
|
||||
key := fmt.Sprintf("%s:user:token:%s", opt.CachePrefix, string(bs))
|
||||
_ = cache.Client.Del(tool.Timeout(3), key)
|
||||
if err = cache.Client.GetScan(tool.Timeout(3), lastKey).Scan(&lastToken); err != nil {
|
||||
if !errors.Is(err, cache.ErrorKeyNotFound) {
|
||||
log.Warn(c.Context(), "handler.AuthLogin: get last token err = %v", err)
|
||||
goto HandleMultiEnd
|
||||
}
|
||||
}
|
||||
|
||||
// 删掉之前的 token
|
||||
if len(bs) > 0 {
|
||||
_ = controller.UserController.RmToken(c.Context(), string(bs))
|
||||
}
|
||||
controller.UserController.RmToken(c.Context(), lastToken)
|
||||
|
||||
// 将当前的 token 存入 last_token
|
||||
if err = cache.Client.Set(tool.Timeout(3), last, token); err != nil {
|
||||
if err = cache.Client.Set(tool.Timeout(3), lastKey, token); err != nil {
|
||||
return resp.Resp500(c, err.Error())
|
||||
}
|
||||
}
|
||||
HandleMultiEnd:
|
||||
|
||||
c.Set("Set-Cookie", fmt.Sprintf("%s=%s; Path=/", opt.CookieName, token))
|
||||
c.Locals("user", target)
|
||||
@ -121,12 +123,28 @@ func AuthVerify(c *nf.Ctx) error {
|
||||
}
|
||||
|
||||
func AuthLogout(c *nf.Ctx) error {
|
||||
defer func() {
|
||||
c.Set("Set-Cookie", fmt.Sprintf("%s=; Path=/; Max-Age=0", opt.CookieName))
|
||||
}()
|
||||
|
||||
op, ok := c.Locals("user").(*model.User)
|
||||
if !ok {
|
||||
return resp.Resp401(c, nil)
|
||||
}
|
||||
|
||||
_ = controller.UserController.RmUserCache(c.Context(), op.Id)
|
||||
token, ok := c.Locals("token").(string)
|
||||
if !ok {
|
||||
return resp.Resp401(c, nil)
|
||||
}
|
||||
|
||||
if !opt.MultiLogin {
|
||||
_ = controller.UserController.RmUserCache(c.Context(), op.Id)
|
||||
lastKey := fmt.Sprintf("%s:user:last_token:%d", opt.CachePrefix, op.Id)
|
||||
cache.Client.Del(c.Context(), lastKey)
|
||||
}
|
||||
|
||||
// 删掉之前的 token
|
||||
controller.UserController.RmToken(c.Context(), token)
|
||||
|
||||
c.Locals(opt.OpLogLocalKey, &oplog.OpLog{
|
||||
Type: model.OpLogTypeLogout,
|
||||
|
Reference in New Issue
Block a user