1
This commit is contained in:
104
common/middleware/auth.go
Normal file
104
common/middleware/auth.go
Normal file
@ -0,0 +1,104 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/pkg"
|
||||
"go-admin/common/middleware/dto"
|
||||
"go-admin/common/service/sysservice/sysstatuscode"
|
||||
statuscode "go-admin/common/status_code"
|
||||
"go-admin/pkg/cryptohelper/jwthelper"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk/config"
|
||||
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||
"go-admin/common/middleware/handler"
|
||||
)
|
||||
|
||||
// AuthInit jwt验证new
|
||||
func AuthInit() (*jwt.GinJWTMiddleware, error) {
|
||||
timeout := time.Hour
|
||||
if config.ApplicationConfig.Mode == "dev" {
|
||||
timeout = time.Duration(876010) * time.Hour
|
||||
} else {
|
||||
if config.JwtConfig.Timeout != 0 {
|
||||
timeout = time.Duration(config.JwtConfig.Timeout) * time.Second
|
||||
}
|
||||
}
|
||||
return jwt.New(&jwt.GinJWTMiddleware{
|
||||
Realm: "test zone",
|
||||
Key: []byte(config.JwtConfig.Secret),
|
||||
Timeout: timeout,
|
||||
MaxRefresh: time.Hour,
|
||||
PayloadFunc: handler.PayloadFunc,
|
||||
IdentityHandler: handler.IdentityHandler,
|
||||
Authenticator: handler.Authenticator,
|
||||
Authorizator: handler.Authorizator,
|
||||
Unauthorized: handler.Unauthorized,
|
||||
TokenLookup: "header: Authorization, query: token, cookie: jwt",
|
||||
TokenHeadName: "Bearer",
|
||||
TimeFunc: time.Now,
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func FrontedAuth(c *gin.Context) {
|
||||
// 从请求头中获取 token 和 os
|
||||
token := c.GetHeader("Authorization")
|
||||
source, _ := strconv.Atoi(c.GetHeader("os"))
|
||||
// 如果 token 不存在,返回未登录的状态
|
||||
if len(token) == 0 {
|
||||
err := ResponseWithStatus(c, dto.NotLoginStatus, statuscode.NotLoggedIn)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
c.Abort() // 停止后续中间件的执行
|
||||
return
|
||||
}
|
||||
// 验证 token 并获取结果
|
||||
flag, rew := jwthelper.MidValidToken(token, source)
|
||||
if flag < 0 || len(rew) == 0 {
|
||||
if flag == -1 {
|
||||
ResponseWithStatus(c, dto.NotLoginStatus, statuscode.NotLoggedIn)
|
||||
} else if flag == -2 {
|
||||
ResponseWithStatus(c, dto.ReLoginStatus, statuscode.ReLogin)
|
||||
}
|
||||
c.Abort() // 停止后续中间件的执行
|
||||
return
|
||||
}
|
||||
// 将解析后的 token 设置到请求头中
|
||||
c.Request.Header.Set("ParseToken", rew)
|
||||
// 继续处理请求
|
||||
c.Next()
|
||||
}
|
||||
|
||||
// ResponseWithStatus 带状态的响应
|
||||
func ResponseWithStatus(ctx *gin.Context, status int, code int, data ...interface{}) error {
|
||||
// 获取语言对应的 msg
|
||||
msg := sysstatuscode.GetStatusCodeDescription(ctx, code)
|
||||
if msg == `` {
|
||||
msg = strconv.Itoa(code)
|
||||
} else {
|
||||
// 配置了语言包参数
|
||||
if strings.Contains(msg, "%") && len(data) > 1 {
|
||||
msg = fmt.Sprintf(msg, data[1:]...)
|
||||
}
|
||||
}
|
||||
|
||||
resp := dto.Response{
|
||||
Status: status,
|
||||
Code: code,
|
||||
Msg: msg,
|
||||
}
|
||||
|
||||
resp.RequestID = pkg.GenerateMsgIDFromContext(ctx)
|
||||
if len(data) > 0 {
|
||||
resp.Data = data[0]
|
||||
}
|
||||
|
||||
ctx.JSON(200, resp)
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user