|
|
@@ -4,7 +4,6 @@ import (
|
|
|
"fmt"
|
|
|
"net/http"
|
|
|
"strconv"
|
|
|
- "strings"
|
|
|
"time"
|
|
|
"woord-core-service/global"
|
|
|
|
|
|
@@ -12,7 +11,10 @@ import (
|
|
|
"github.com/golang-jwt/jwt/v4"
|
|
|
)
|
|
|
|
|
|
-const AuthUserKey = "user"
|
|
|
+const (
|
|
|
+ AuthUserKey = "_user"
|
|
|
+ AuthTokenKey = "_token"
|
|
|
+)
|
|
|
|
|
|
var (
|
|
|
ErrNotLoggedIn = fmt.Errorf("请先登录")
|
|
|
@@ -49,16 +51,16 @@ func parseToken(tokenString string) (uint, error) {
|
|
|
// JWT 认证中间件
|
|
|
func JWTAuth() gin.HandlerFunc {
|
|
|
return func(c *gin.Context) {
|
|
|
- // 获取 Authorization 请求头
|
|
|
- auth := strings.Split(c.GetHeader("Authorization"), " ")
|
|
|
- if len(auth) < 2 || auth[0] != "Bearer" {
|
|
|
+ // 从 Cookie 获取 JWT
|
|
|
+ token, err := c.Cookie(AuthTokenKey)
|
|
|
+ if err != nil {
|
|
|
respondError(c, http.StatusUnauthorized, ErrNotLoggedIn)
|
|
|
c.Abort()
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 解析 JWT
|
|
|
- userID, err := parseToken(auth[1])
|
|
|
+ userID, err := parseToken(token)
|
|
|
if err != nil {
|
|
|
respondError(c, http.StatusUnauthorized, ErrInvalidToken)
|
|
|
c.Abort()
|