优化报销管理增加挂靠
This commit is contained in:
1 parent
7b1c94b5ff
commit
ee49ef15b5
24 files changed
+1267
-70
No files matched your search
@@ -133,6 +133,47 @@ func CreateSession(info SessionInfo) (*models.AuthSession, error) {
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// ReuseSession 授权码换令牌时复用登录阶段已经建立的会话。
|
||||
//
|
||||
// authorize 阶段已经用 yz_sid Cookie 校验过登录态,换码只是给这个已登录会话
|
||||
// 签发令牌,不应再 CreateSession:默认「1 号 1 机」策略会把刚登录的会话踢成
|
||||
// revoked,而浏览器 Cookie 里仍是旧 sid,之后任何一次回到认证中心都会被判定
|
||||
// 未登录并重新显示登录页(表现为「登录成功后又跳回登录界面」)。
|
||||
//
|
||||
// 找不到有效会话(过期、被下线等)时才回退到新建会话。
|
||||
func ReuseSession(info SessionInfo) (*models.AuthSession, error) {
|
||||
var list []models.AuthSession
|
||||
_, err := models.Orm.QueryTable(new(models.AuthSession)).
|
||||
Filter("identity_id", info.IdentityID).
|
||||
Filter("tid", info.Tid).
|
||||
Filter("revoked", 0).
|
||||
OrderBy("-login_at").
|
||||
All(&list)
|
||||
if err == nil {
|
||||
now := time.Now()
|
||||
var fallback *models.AuthSession
|
||||
for i := range list {
|
||||
if !list[i].ExpiresAt.After(now) {
|
||||
continue
|
||||
}
|
||||
// 优先复用同一应用的登录会话;同一浏览器会话被多个应用共享时,
|
||||
// client_id 可能为空(直接访问登录页),此时复用最近的有效会话。
|
||||
if list[i].ClientID == info.ClientID {
|
||||
_ = TouchSession(list[i].Sid)
|
||||
return &list[i], nil
|
||||
}
|
||||
if fallback == nil {
|
||||
fallback = &list[i]
|
||||
}
|
||||
}
|
||||
if fallback != nil {
|
||||
_ = TouchSession(fallback.Sid)
|
||||
return fallback, nil
|
||||
}
|
||||
}
|
||||
return CreateSession(info)
|
||||
}
|
||||
|
||||
// GetSession 查询有效会话(已吊销或已过期返回错误)
|
||||
func GetSession(sid string) (*models.AuthSession, error) {
|
||||
var s models.AuthSession
|
||||
|
||||
Reference in new issue
Block a user