jwt 测试

This commit is contained in:
Shikong 2022-10-06 00:01:30 +08:00
parent b2972673ae
commit ac37297e83
6 changed files with 360 additions and 5 deletions

View File

@ -1,7 +1,67 @@
package test
import "github.com/gofiber/fiber/v2"
import (
"github.com/gofiber/fiber/v2"
"gofiber.study.skcks.cn/common/errorx"
"gofiber.study.skcks.cn/common/response"
"gofiber.study.skcks.cn/global"
)
func RegisterController(app *fiber.App) {
app.Group("/test")
group := app.Group("/test")
jwtEncode(group)
jwtDecode(group)
}
// jwtEncode jwt token 生成测试
//
// @Summary jwt token 生成测试
// @Description jwt token 生成测试
// @Tags Test
// @Accept json
// @Produce json
// @Param userClaims body global.UserClaims true "userClaims"
// @Success 200 {object} response.Response{data=string}
// @Failure default {object} errorx.CodeErrorResponse
// @Router /test/jwt [post]
func jwtEncode(r fiber.Router) {
r.Add(fiber.MethodPost, "/jwt", func(ctx *fiber.Ctx) error {
claims := global.UserClaims{}
err := ctx.BodyParser(&claims)
if err != nil {
return ctx.JSON(errorx.NewDefaultError(err.Error()))
}
token, err := global.GetToken(claims)
if err != nil {
return ctx.JSON(errorx.NewDefaultError(err.Error()))
}
return ctx.JSON(response.NewResponse(token))
})
}
// jwtDecode jwt token 解析测试
//
// @Summary jwt token 解析测试
// @Description jwt token 解析测试
// @Tags Test
// @Accept json
// @Produce json
// @Param token query string true "token"
// @Success 200 {object} response.Response{data=global.UserClaims}
// @Failure default {object} errorx.CodeErrorResponse
// @Router /test/jwt [get]
func jwtDecode(r fiber.Router) {
r.Add(fiber.MethodGet, "/jwt", func(ctx *fiber.Ctx) error {
token := ctx.Query("token")
claims, err := global.ParseToken(token)
if err != nil {
return ctx.JSON(errorx.NewDefaultError(err.Error()))
}
return ctx.JSON(response.NewResponse(claims))
})
}

View File

@ -379,6 +379,106 @@ const docTemplate = `{
}
}
},
"/test/jwt": {
"get": {
"description": "jwt token 解析测试",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Test"
],
"summary": "jwt token 解析测试",
"parameters": [
{
"type": "string",
"description": "token",
"name": "token",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/global.UserClaims"
}
}
}
]
}
},
"default": {
"description": "",
"schema": {
"$ref": "#/definitions/errorx.CodeErrorResponse"
}
}
}
},
"post": {
"description": "jwt token 生成测试",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Test"
],
"summary": "jwt token 生成测试",
"parameters": [
{
"description": "userClaims",
"name": "userClaims",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/global.UserClaims"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"data": {
"type": "string"
}
}
}
]
}
},
"default": {
"description": "",
"schema": {
"$ref": "#/definitions/errorx.CodeErrorResponse"
}
}
}
}
},
"/user/account": {
"get": {
"security": [
@ -474,6 +574,17 @@ const docTemplate = `{
}
}
},
"global.UserClaims": {
"type": "object",
"properties": {
"account": {
"type": "string"
},
"id": {
"type": "string"
}
}
},
"models.User": {
"type": "object",
"properties": {

View File

@ -371,6 +371,106 @@
}
}
},
"/test/jwt": {
"get": {
"description": "jwt token 解析测试",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Test"
],
"summary": "jwt token 解析测试",
"parameters": [
{
"type": "string",
"description": "token",
"name": "token",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/global.UserClaims"
}
}
}
]
}
},
"default": {
"description": "",
"schema": {
"$ref": "#/definitions/errorx.CodeErrorResponse"
}
}
}
},
"post": {
"description": "jwt token 生成测试",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Test"
],
"summary": "jwt token 生成测试",
"parameters": [
{
"description": "userClaims",
"name": "userClaims",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/global.UserClaims"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"data": {
"type": "string"
}
}
}
]
}
},
"default": {
"description": "",
"schema": {
"$ref": "#/definitions/errorx.CodeErrorResponse"
}
}
}
}
},
"/user/account": {
"get": {
"security": [
@ -466,6 +566,17 @@
}
}
},
"global.UserClaims": {
"type": "object",
"properties": {
"account": {
"type": "string"
},
"id": {
"type": "string"
}
}
},
"models.User": {
"type": "object",
"properties": {

View File

@ -27,6 +27,13 @@ definitions:
description: Original registered route path
type: string
type: object
global.UserClaims:
properties:
account:
type: string
id:
type: string
type: object
models.User:
properties:
account:
@ -295,6 +302,66 @@ paths:
summary: 获取所有路由
tags:
- Routes
/test/jwt:
get:
consumes:
- application/json
description: jwt token 解析测试
parameters:
- description: token
in: query
name: token
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.Response'
- properties:
data:
$ref: '#/definitions/global.UserClaims'
type: object
default:
description: ""
schema:
$ref: '#/definitions/errorx.CodeErrorResponse'
summary: jwt token 解析测试
tags:
- Test
post:
consumes:
- application/json
description: jwt token 生成测试
parameters:
- description: userClaims
in: body
name: userClaims
required: true
schema:
$ref: '#/definitions/global.UserClaims'
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/response.Response'
- properties:
data:
type: string
type: object
default:
description: ""
schema:
$ref: '#/definitions/errorx.CodeErrorResponse'
summary: jwt token 生成测试
tags:
- Test
/user/account:
get:
consumes:

View File

@ -15,7 +15,7 @@ func SyncModelToDataSource() {
logger.Log.Infof("[*] 同步数据库/表结构")
for _, model := range modelArr {
err := DataSources.Sync(model)
err := DataSources.Sync2(model)
logger.Log.Infof("[√] 同步 %s 表 数据结构 成功", model.TableName())
if err != nil {

View File

@ -9,11 +9,14 @@ import (
var JwtConfig *config.JwtConfig
// UserClaims
// @Param id body string true
// @Param account body string true
type UserClaims struct {
Id string `json:"id"`
Account string `json:"account"`
jwt.RegisteredClaims
jwt.RegisteredClaims `swaggerignore:"true"`
}
func GetToken(claims UserClaims) (string, error) {
@ -24,12 +27,15 @@ func GetToken(claims UserClaims) (string, error) {
claims.ExpiresAt = jwt.NewNumericDate(time.Unix(expire, 0))
token := jwt.New(jwt.SigningMethodHS256)
token.Claims = claims
return token.SignedString([]byte(JwtConfig.Secret))
}
func ParseToken(tokenStr string) (*UserClaims, error) {
token, err := jwt.ParseWithClaims(tokenStr, &UserClaims{}, func(token *jwt.Token) (interface{}, error) {
return JwtConfig.Secret, nil
return []byte(JwtConfig.Secret), nil
})
if err != nil {