70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package main
|
||
|
||
import (
|
||
"strings"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
// Token 认证中间件
|
||
func TokenAuth() gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
// 从请求头获取 token
|
||
authHeader := c.GetHeader("Authorization")
|
||
|
||
if authHeader == "" {
|
||
c.JSON(401, gin.H{"error": "Missing Authorization header"})
|
||
c.Abort()
|
||
return
|
||
}
|
||
|
||
// 验证 token 格式(Bearer xxx)
|
||
parts := strings.SplitN(authHeader, " ", 2)
|
||
if len(parts) != 2 || parts[0] != "Bearer" {
|
||
c.JSON(401, gin.H{"error": "Invalid Authorization header"})
|
||
c.Abort()
|
||
return
|
||
}
|
||
|
||
token := parts[1]
|
||
|
||
// 验证 token 有效性(简化版,实际应使用 JWT)
|
||
if !isValidToken(token) {
|
||
c.JSON(401, gin.H{"error": "Invalid token"})
|
||
c.Abort()
|
||
return
|
||
}
|
||
|
||
// 提取用户信息(从 token)
|
||
userID := extractUserID(token)
|
||
c.Set("user_id", userID)
|
||
|
||
c.Next()
|
||
}
|
||
}
|
||
|
||
// 验证 token(示例)
|
||
func isValidToken(token string) bool {
|
||
return token == "valid_token_123"
|
||
}
|
||
|
||
// 提取用户ID(示例)
|
||
func extractUserID(token string) string {
|
||
return "user123"
|
||
}
|
||
|
||
func main() {
|
||
r := gin.Default()
|
||
|
||
// 需要 token 的路由
|
||
r.GET("/profile", TokenAuth(), func(c *gin.Context) {
|
||
userID := c.GetString("user_id")
|
||
c.JSON(200, gin.H{
|
||
"user_id": userID,
|
||
"profile": "User profile data",
|
||
})
|
||
})
|
||
|
||
r.Run(":9999")
|
||
}
|