【发布时间】:2021-02-23 21:59:27
【问题描述】:
我将会话保存在 redis 数据库中(不是内存,实际上是数据库)。
我想在会话中存储一些内容,以便能够跟踪用户会话并能够限制每个用户可以拥有的会话数量。
我已经注册,登录和退出工作。
签名时,它会检查他们是否有有效的会话,如果没有,它将验证用户,然后创建一个会话并向会话添加值。 当他们退出时,它将删除会话。
当我检查 Redis 数据库时,我看到:
KEYS '*'
"session_QPEOONJ25OG4HGWCN4Y556VGUN26V7IIASOYLGBVPZSPKO2B3P7FENYYDLPRWV2IBJK4RNANLCYANGMN7UUDG6DJ4NZG7XZBSFW3LWI"
这是我的登录功能。
func signIn(c echo.Context) error {
ctx := c.Request().Context()
collection := mg.Db.Collection("users")
// validation code removed for convenience
err = bcrypt.CompareHashAndPassword([]byte(existingUser.HashedPassword), []byte(signInUser.Password))
if err != nil {
return c.String(http.StatusNotAcceptable, "Incorrect password")
}
store := redisSessionInstance.Store
session, err := store.Get(c.Request(), "session_")
if err != nil {
fmt.Println("failed getting session: ", err)
}
// checks if session exists or is new one
if session.IsNew {
session.Values["id"] = existingUser.ID.String() // ID of user from mongodb
session.Values["role"] = existingUser.Role
// Save session
if err = session.Save(c.Request(), c.Response()); err != nil {
fmt.Println("failed saving session: ", err)
}
}
return c.String(http.StatusAccepted, "Signed In!")
}
如您所见,我获得了用户 ID 和角色等信息。
我希望能够限制每个用户可以随时打开的会话数量。 我还希望能够知道 Redis Db 中每个用户的会话,并能够删除每个用户的会话。 (基本上是某种将每个用户与他们的会话联系起来的方法)
我该怎么做?
【问题讨论】:
标签: go redis redis-cluster