jwt - skynocover/Wiki-for-GoLang GitHub Wiki

JWT

package jwt

import (
	"auth/src/database"
	"time"
	"github.com/dgrijalva/jwt-go"
)

type authtoken struct {
	Account string    `json:"account"`
	IsAdmin bool      `json:"isAdmin"`
	Time    time.Time `josn:"time"`
	jwt.StandardClaims
}

const secret = "627cb2958358c7c6d6e51154e9b07635"

// VerifyToken ...
func VerifyToken(tokenString string) (*authtoken, bool) {
	token, err := jwt.ParseWithClaims(tokenString, &authtoken{}, func(token *jwt.Token) (interface{}, error) {
		return []byte(secret), nil
	})
	if err != nil {
		return nil, false
	}
	claims, ok := token.Claims.(*authtoken)
	if ok && token.Valid {
		return claims, ok
	}
	return claims, ok
}

// GenToken ...
func GenToken(fuser database.Users) (tokenString string) {
	tk := &authtoken{Account: fuser.Account, IsAdmin: fuser.IsAdmin, Time: time.Now()}
	token := jwt.NewWithClaims(jwt.GetSigningMethod("HS256"), tk) //宣告使用 HS256 與加入Payload 的聲明內容

	tokenString, _ = token.SignedString([]byte(secret))
	return
}