/* * @Author: LinkLeong link@icewhale.com * @Date: 2021-09-30 18:18:14 * @LastEditors: LinkLeong * @LastEditTime: 2022-07-18 17:30:38 * @FilePath: /CasaOS/pkg/utils/jwt/jwt.go * @Description: * @Website: https://www.casaos.io * Copyright (c) 2022 by icewhale, All Rights Reserved. */ package jwt import ( "time" jwt "github.com/golang-jwt/jwt/v4" ) type Claims struct { Username string `json:"username"` PassWord string `json:"password"` Id int `json:"id"` jwt.RegisteredClaims } var jwtSecret []byte //创建token func GenerateToken(username, password string, id int, issuer string, t time.Duration) (string, error) { clims := Claims{ username, password, id, jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(t)), IssuedAt: jwt.NewNumericDate(time.Now()), NotBefore: jwt.NewNumericDate(time.Now()), Issuer: issuer, }, } tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, clims) token, err := tokenClaims.SignedString(jwtSecret) return token, err } //解析token func ParseToken(token string, valid bool) (*Claims, error) { tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) { return jwtSecret, nil }) if tokenClaims != nil { if clims, ok := tokenClaims.Claims.(*Claims); ok { if valid && tokenClaims.Valid { return clims, nil } else if !valid { return clims, nil } } } return nil, err }