2025-05-08 13:18:54 +08:00
|
|
|
package auth
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"fmt"
|
2025-05-10 16:59:41 +08:00
|
|
|
g "platform/web/globals"
|
2025-11-17 18:38:10 +08:00
|
|
|
m "platform/web/models"
|
|
|
|
|
q "platform/web/queries"
|
2025-05-12 10:07:12 +08:00
|
|
|
"time"
|
2025-05-08 13:18:54 +08:00
|
|
|
|
2025-11-17 18:38:10 +08:00
|
|
|
"gorm.io/gen/field"
|
|
|
|
|
)
|
2025-05-08 13:18:54 +08:00
|
|
|
|
2025-11-17 18:38:10 +08:00
|
|
|
func FindSession(accessToken string, now time.Time) (*m.Session, error) {
|
|
|
|
|
return q.Session.
|
|
|
|
|
Preload(field.Associations).
|
|
|
|
|
Where(
|
|
|
|
|
q.Session.AccessToken.Eq(accessToken),
|
2025-11-24 18:44:06 +08:00
|
|
|
q.Session.AccessTokenExpires.Gt(now),
|
2025-11-17 18:38:10 +08:00
|
|
|
).First()
|
2025-05-08 13:18:54 +08:00
|
|
|
}
|
|
|
|
|
|
2025-11-17 18:38:10 +08:00
|
|
|
func FindSessionByRefresh(refreshToken string, now time.Time) (*m.Session, error) {
|
|
|
|
|
return q.Session.
|
|
|
|
|
Preload(field.Associations).
|
|
|
|
|
Where(
|
|
|
|
|
q.Session.RefreshToken.Eq(refreshToken),
|
2025-11-24 18:44:06 +08:00
|
|
|
q.Session.RefreshTokenExpires.Gt(now),
|
2025-11-17 18:38:10 +08:00
|
|
|
).First()
|
2025-05-12 10:07:12 +08:00
|
|
|
}
|
|
|
|
|
|
2025-12-29 10:18:01 +08:00
|
|
|
func SaveSession(tx *q.Query, session *m.Session) error {
|
|
|
|
|
return tx.Session.Save(session)
|
2025-05-12 10:07:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func RemoveSession(ctx context.Context, accessToken string, refreshToken string) error {
|
|
|
|
|
g.Redis.Del(ctx, accessKey(accessToken), refreshKey(refreshToken))
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 令牌键的格式为 "session:<token>"
|
2025-05-08 13:18:54 +08:00
|
|
|
func accessKey(token string) string {
|
|
|
|
|
return fmt.Sprintf("session:%s", token)
|
|
|
|
|
}
|
2025-05-12 10:07:12 +08:00
|
|
|
|
|
|
|
|
// 刷新令牌键的格式为 "session:refreshKey:<token>"
|
|
|
|
|
func refreshKey(token string) string {
|
|
|
|
|
return fmt.Sprintf("session:refresh:%s", token)
|
|
|
|
|
}
|