2023-12-26 15:34:38 +08:00
|
|
|
package TokenServiceImpl
|
2023-12-25 02:15:59 +08:00
|
|
|
|
|
|
|
import (
|
|
|
|
"PersonalMain/internal/dao/tokenDAO"
|
|
|
|
"PersonalMain/internal/model/do"
|
2023-12-26 15:34:38 +08:00
|
|
|
"PersonalMain/utility/ErrorCode"
|
|
|
|
"PersonalMain/utility/ResultUtil"
|
2023-12-25 02:15:59 +08:00
|
|
|
"github.com/gogf/gf/v2/net/ghttp"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
type DefaultTokenImpl struct{}
|
|
|
|
|
|
|
|
// CreateToken
|
|
|
|
//
|
|
|
|
// 创建Token业务
|
|
|
|
func (_ DefaultTokenImpl) CreateToken() *do.TokenDO {
|
|
|
|
token := tokenDAO.CreateToken()
|
|
|
|
// 检查数据库中是否存在该 token
|
|
|
|
return &token
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetToken
|
|
|
|
//
|
|
|
|
// 获取Token业务
|
|
|
|
func (_ DefaultTokenImpl) GetToken(req *ghttp.Request) *do.TokenDO {
|
|
|
|
// 获取 Cookie 中的 token
|
|
|
|
cookieToken := req.Cookie.Get("token")
|
|
|
|
if cookieToken != nil {
|
|
|
|
// 数据库查找 token
|
|
|
|
token := tokenDAO.GetToken(cookieToken.String())
|
|
|
|
// 检查数据库中是否存在该 token
|
|
|
|
if token != nil {
|
|
|
|
// 检查Token是否超时
|
|
|
|
return token
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// VerifyToken
|
|
|
|
//
|
|
|
|
// 验证Token是否有效
|
|
|
|
func (_ DefaultTokenImpl) VerifyToken(token *do.TokenDO) bool {
|
|
|
|
if token != nil {
|
|
|
|
if token.ExpiredAt.After(time.Now()) {
|
|
|
|
return true
|
|
|
|
} else {
|
|
|
|
// 删除数据库
|
|
|
|
tokenDAO.DeleteToken(token.Token)
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
2023-12-26 15:34:38 +08:00
|
|
|
|
|
|
|
// LoginToken
|
|
|
|
//
|
|
|
|
// 登录Token业务
|
|
|
|
func (_ DefaultTokenImpl) LoginToken(req *ghttp.Request, userDO do.UserDO) *do.TokenDO {
|
|
|
|
// 更新数据库
|
|
|
|
newTokenDO, err := tokenDAO.UpdateToken(req.Cookie.Get("token").String(), userDO.Id)
|
|
|
|
if err == nil {
|
|
|
|
if newTokenDO != nil {
|
|
|
|
return newTokenDO
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch err.Error() {
|
|
|
|
case "DatabaseError":
|
|
|
|
ResultUtil.ErrorNoData(req, ErrorCode.ServerDatabaseInteriorError)
|
|
|
|
case "AlreadyLogin":
|
|
|
|
ResultUtil.ErrorNoData(req, ErrorCode.AlreadyLogin)
|
|
|
|
case "TokenNotFound":
|
|
|
|
ResultUtil.ErrorNoData(req, ErrorCode.TokenNotFound)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|