当前位置: 首页 > wzjs >正文

怎么看一个网站是否是外包做的destoon做的网站

怎么看一个网站是否是外包做的,destoon做的网站,搭建网站框架,互联网 医疗网站建设有哪些城市下面是一个典型的 Go 后端双 Token 认证机制 实现模板,使用 Gin 框架 JWT Redis,结构清晰、可拓展,适合实战开发。 项目结构建议 /utils├── jwt.go // Access & Refresh token 的生成和解析├── claims.go // 从请求…

下面是一个典型的 Go 后端双 Token 认证机制 实现模板,使用 Gin 框架 + JWT + Redis,结构清晰、可拓展,适合实战开发。


项目结构建议

/utils├── jwt.go         // Access & Refresh token 的生成和解析├── claims.go      // 从请求中提取用户信息
/middleware└── auth.go        // 中间件:校验 Access Token + 黑名单
/controller├── auth.go        // 登录、刷新、登出接口
/redis└── client.go      // Redis 黑名单管理

1. JWT 工具(utils/jwt.go

package utilsimport ("time""github.com/golang-jwt/jwt/v5"
)var accessSecret = []byte("access_secret")
var refreshSecret = []byte("refresh_secret")type CustomClaims struct {UserID uint `json:"user_id"`jwt.RegisteredClaims
}func GenerateAccessToken(userID uint) (string, error) {claims := CustomClaims{UserID: userID,RegisteredClaims: jwt.RegisteredClaims{ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)),IssuedAt:  jwt.NewNumericDate(time.Now()),},}return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(accessSecret)
}func GenerateRefreshToken(userID uint) (string, error) {claims := CustomClaims{UserID: userID,RegisteredClaims: jwt.RegisteredClaims{ExpiresAt: jwt.NewNumericDate(time.Now().Add(7 * 24 * time.Hour)),IssuedAt:  jwt.NewNumericDate(time.Now()),},}return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(refreshSecret)
}func ParseToken(tokenStr string, isRefresh bool) (*CustomClaims, error) {key := accessSecretif isRefresh {key = refreshSecret}token, err := jwt.ParseWithClaims(tokenStr, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {return key, nil})if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid {return claims, nil}return nil, err
}

2. 中间件验证 Access Token(middleware/auth.go

package middlewareimport ("chat/redis""chat/utils""github.com/gin-gonic/gin""net/http""strings"
)func JWTAuthMiddleware() gin.HandlerFunc {return func(c *gin.Context) {authHeader := c.GetHeader("Authorization")if authHeader == "" || !strings.HasPrefix(authHeader, "Bearer ") {c.JSON(http.StatusUnauthorized, gin.H{"error": "token required"})c.Abort()return}token := strings.TrimPrefix(authHeader, "Bearer ")claims, err := utils.ParseToken(token, false)if err != nil {c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid token"})c.Abort()return}if redis.IsBlacklisted(token) {c.JSON(http.StatusUnauthorized, gin.H{"error": "token is blacklisted"})c.Abort()return}c.Set("userID", claims.UserID)c.Next()}
}

3. Redis 黑名单管理(redis/client.go

package redisimport ("context""time""github.com/redis/go-redis/v9"
)var RDB *redis.Clientfunc InitRedis() {RDB = redis.NewClient(&redis.Options{Addr: "localhost:6379",DB:   0,})
}var ctx = context.Background()func AddToBlacklist(token string, expiration time.Duration) {RDB.Set(ctx, "blacklist:"+token, "1", expiration)
}func IsBlacklisted(token string) bool {val, err := RDB.Get(ctx, "blacklist:"+token).Result()return err == nil && val == "1"
}

4. 登录、刷新、退出接口(controller/auth.go

package controllerimport ("chat/redis""chat/utils""github.com/gin-gonic/gin""net/http""time"
)func Login(c *gin.Context) {// 假设账号密码校验通过,用户ID是 123userID := uint(123)accessToken, _ := utils.GenerateAccessToken(userID)refreshToken, _ := utils.GenerateRefreshToken(userID)c.SetCookie("refresh_token", refreshToken, 7*24*3600, "/", "localhost", false, true)c.JSON(http.StatusOK, gin.H{"access_token": accessToken})
}func Refresh(c *gin.Context) {refreshToken, err := c.Cookie("refresh_token")if err != nil {c.JSON(http.StatusUnauthorized, gin.H{"error": "refresh token not found"})return}claims, err := utils.ParseToken(refreshToken, true)if err != nil {c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid refresh token"})return}newAccessToken, _ := utils.GenerateAccessToken(claims.UserID)c.JSON(http.StatusOK, gin.H{"access_token": newAccessToken})
}func Logout(c *gin.Context) {token := c.GetHeader("Authorization")if token != "" {token = token[len("Bearer "):]redis.AddToBlacklist(token, 15*time.Minute) // 过期时间与 access token 一致}c.SetCookie("refresh_token", "", -1, "/", "localhost", false, true)c.JSON(http.StatusOK, gin.H{"message": "logout success"})
}

5. 路由注册(main.go

r := gin.Default()
redis.InitRedis()auth := r.Group("/auth")
{auth.POST("/login", controller.Login)auth.POST("/refresh", controller.Refresh)auth.POST("/logout", controller.Logout)
}api := r.Group("/api", middleware.JWTAuthMiddleware())
{api.GET("/me", func(c *gin.Context) {userID := c.GetUint("userID")c.JSON(http.StatusOK, gin.H{"user_id": userID})})
}


文章转载自:

http://XWnsr0nV.zcwtL.cn
http://mRelp6Bi.zcwtL.cn
http://lWz7NnAl.zcwtL.cn
http://vX2wpupa.zcwtL.cn
http://4TWNeWp9.zcwtL.cn
http://JOt1MOh0.zcwtL.cn
http://QL8XV2mZ.zcwtL.cn
http://MVTQYObp.zcwtL.cn
http://xMC6Jf8Q.zcwtL.cn
http://Ha6lOztC.zcwtL.cn
http://0v8MTVCr.zcwtL.cn
http://EK8Tkae8.zcwtL.cn
http://p8c8wOBv.zcwtL.cn
http://WkvMiUka.zcwtL.cn
http://JiYFp7Nz.zcwtL.cn
http://BkeSWrhU.zcwtL.cn
http://b7CmQ26Z.zcwtL.cn
http://L4Rhre4b.zcwtL.cn
http://jt3QQLhJ.zcwtL.cn
http://zulkaGf6.zcwtL.cn
http://lmwpV6q9.zcwtL.cn
http://Iiwfzu9c.zcwtL.cn
http://59yCZQx3.zcwtL.cn
http://xwEmhoH1.zcwtL.cn
http://KirjpuZ1.zcwtL.cn
http://jo2yQVxQ.zcwtL.cn
http://MLIoLx3C.zcwtL.cn
http://EFxEIluy.zcwtL.cn
http://sXAVjkJw.zcwtL.cn
http://mfAulF5l.zcwtL.cn
http://www.dtcms.com/wzjs/712611.html

相关文章:

  • 网站如何添加图标我想建设一个算命网站
  • 上海空灵网站设计北京装修公司哪家口碑最好 知乎
  • 不用下载就能看的网站的浏览器高性能网站建设书籍
  • 网站开发定义名称网站占有率
  • 国际英文网站广州网站搭建快速提升网站排名
  • 济南做网站公司wordpress 会员中心插件
  • 荣成市城乡建设局网站创建网页用什么软件
  • 定制版网站建设详细报价单网站建设 解决方案
  • 虚拟主机做网站wordpress3.7.1下载
  • 大良网站建设如何网站备案初审时间
  • 拍卖网站功能需求文档wordpress 文字插件下载
  • 免费素材网站素材库简单的网页设计论文
  • 我需要把网站做山东城市建设职业学院教务网站
  • 做网站虚拟主机和云服务器吗北京网站后台培训
  • 单页网站 营销wordpress登入地址
  • 赌场网站建站网站建设方案开发
  • 开发区网站建设工作管理办法网页设计与制作教程目录
  • 有人找做网站的led灯网站策划书
  • sns社交网站开发教程在线制作头像模板
  • 微网站是免费的吗wordpress文章自动标签
  • 西安知名的网站建设公司wordpress 主题 36kr
  • 深圳最专业的高端网站建设阿里云虚拟主机wordpress建站教程
  • 网站图文列表公司网络架构
  • 自适应模板网站网站有哪些分类
  • 那个公司做网站好互联网金融型网站开发
  • 兴安盟新百度县seo快速排名快速排名优化怎么样
  • 宣传片制作方案seo工作是什么意思
  • 连云港做网站的代做网站公司哪家好
  • 网站建设石家庄中国信用网企业查询
  • 合水口网站建设昆山住房与城乡建设局官网