jwt-go的简单使用


JWT-GO的简单使用

        • 下载
        • 组成
        • 载荷,可以加一些自己需要的信息
        • 生成token
        • 解析token
        • JWTAuth 中间件
        • 总结

下载
git clone https://github.com/dgrijalva/jwt-go

组成
Header 头部、Payload 载荷、Signature 签名, 用 . 连接

载荷,可以加一些自己需要的信息
type Claims struct { Namestring `json:"name"` Phone string `json:"phone"` jwt.StandardClaims }

生成token
func GenerateToken(username, password string) (string, error) { nowTime := time.Now()//当前时间 expireTime := nowTime.Add(3 * time.Hour)//有效时间claims := Claims{ username, password, jwt.StandardClaims { ExpiresAt : expireTime.Unix(), Issuer : "its me", }, }tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) token, err := tokenClaims.SignedString(jwtSecret) return token, err }

解析token
func ParseToken(token string) (*Claims, error) { tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) { return jwtSecret, nil })if tokenClaims != nil { if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid { return claims, nil } } return nil, err }

JWTAuth 中间件
func JWTAuth() gin.HandlerFunc { return func(c *gin.Context) { token := c.Request.Header.Get("Authorization") if token == "" { c.JSON(http.StatusOK, gin.H{ "msg":"请求未携带token,无权限访问", }) c.Abort() return } // parseToken 解析token包含的信息 claims, err := ParseToken(token) if err != nil { c.JSON(http.StatusOK, gin.H{ "msg":err.Error(), }) c.Abort() return } // 继续交由下一个路由处理,并将解析出的信息传递下去 c.Set("claims", claims) } }

总结 【jwt-go的简单使用】初学go+vue的简单练习demo。使用jwt作为验证,将生成token并在登录接口返回。
jwt-go的简单使用
文章图片

后期会出vue和gin的跨域示例。前端将使用路由守卫在每个访问接口内添加Authorization判断是否登录并请求后端接口。感谢关注!

    推荐阅读