From 48f05b4e95f955174578d7370260e816f752d02a Mon Sep 17 00:00:00 2001 From: xmdhs Date: Mon, 4 Sep 2023 15:07:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=AD=97=E6=AE=B5=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/ent/migrate/schema.go | 21 ++++++++++++++------- db/ent/schema/skin.go | 5 ++++- db/ent/schema/user.go | 13 ++++++++++--- db/ent/schema/userprofile.go | 9 +++++++-- db/ent/schema/usertoken.go | 12 +++++++++++- model/model.go | 1 + service/yggdrasil/authenticate.go | 3 ++- 7 files changed, 49 insertions(+), 15 deletions(-) diff --git a/db/ent/migrate/schema.go b/db/ent/migrate/schema.go index 03a1c52..541e4f6 100644 --- a/db/ent/migrate/schema.go +++ b/db/ent/migrate/schema.go @@ -11,7 +11,7 @@ var ( // SkinsColumns holds the columns for the "skins" table. SkinsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, - {Name: "skin_hash", Type: field.TypeString}, + {Name: "skin_hash", Type: field.TypeString, SchemaType: map[string]string{"mysql": "VARCHAR(100)"}}, {Name: "type", Type: field.TypeUint8}, {Name: "variant", Type: field.TypeString}, {Name: "skin_created_user", Type: field.TypeInt}, @@ -40,9 +40,9 @@ var ( // UsersColumns holds the columns for the "users" table. UsersColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, - {Name: "email", Type: field.TypeString, Unique: true}, - {Name: "password", Type: field.TypeString}, - {Name: "salt", Type: field.TypeString}, + {Name: "email", Type: field.TypeString, Unique: true, SchemaType: map[string]string{"mysql": "VARCHAR(30)"}}, + {Name: "password", Type: field.TypeString, SchemaType: map[string]string{"mysql": "VARCHAR(80)"}}, + {Name: "salt", Type: field.TypeString, SchemaType: map[string]string{"mysql": "VARCHAR(50)"}}, {Name: "state", Type: field.TypeInt}, {Name: "reg_time", Type: field.TypeInt64}, {Name: "user_token", Type: field.TypeInt, Nullable: true}, @@ -78,8 +78,8 @@ var ( // UserProfilesColumns holds the columns for the "user_profiles" table. UserProfilesColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, - {Name: "name", Type: field.TypeString, Unique: true}, - {Name: "uuid", Type: field.TypeString}, + {Name: "name", Type: field.TypeString, Unique: true, SchemaType: map[string]string{"mysql": "VARCHAR(20)"}}, + {Name: "uuid", Type: field.TypeString, SchemaType: map[string]string{"mysql": "VARCHAR(32)"}}, {Name: "user_profile", Type: field.TypeInt, Unique: true}, } // UserProfilesTable holds the schema information for the "user_profiles" table. @@ -107,13 +107,20 @@ var ( UserTokensColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "token_id", Type: field.TypeUint64}, - {Name: "uuid", Type: field.TypeString}, + {Name: "uuid", Type: field.TypeString, SchemaType: map[string]string{"mysql": "VARCHAR(32)"}}, } // UserTokensTable holds the schema information for the "user_tokens" table. UserTokensTable = &schema.Table{ Name: "user_tokens", Columns: UserTokensColumns, PrimaryKey: []*schema.Column{UserTokensColumns[0]}, + Indexes: []*schema.Index{ + { + Name: "usertoken_uuid", + Unique: false, + Columns: []*schema.Column{UserTokensColumns[2]}, + }, + }, } // Tables holds all the tables in the schema. Tables = []*schema.Table{ diff --git a/db/ent/schema/skin.go b/db/ent/schema/skin.go index 026e902..36fc36f 100644 --- a/db/ent/schema/skin.go +++ b/db/ent/schema/skin.go @@ -2,6 +2,7 @@ package schema import ( "entgo.io/ent" + "entgo.io/ent/dialect" "entgo.io/ent/schema/edge" "entgo.io/ent/schema/field" "entgo.io/ent/schema/index" @@ -15,7 +16,9 @@ type Skin struct { // Fields of the Skin. func (Skin) Fields() []ent.Field { return []ent.Field{ - field.String("skin_hash"), + field.String("skin_hash").SchemaType(map[string]string{ + dialect.MySQL: "VARCHAR(100)", + }), field.Uint8("type"), field.String("variant"), } diff --git a/db/ent/schema/user.go b/db/ent/schema/user.go index 8e4075a..9405a5e 100644 --- a/db/ent/schema/user.go +++ b/db/ent/schema/user.go @@ -2,6 +2,7 @@ package schema import ( "entgo.io/ent" + "entgo.io/ent/dialect" "entgo.io/ent/dialect/entsql" "entgo.io/ent/schema/edge" "entgo.io/ent/schema/field" @@ -16,9 +17,15 @@ type User struct { // Fields of the User. func (User) Fields() []ent.Field { return []ent.Field{ - field.String("email").Unique(), - field.String("password"), - field.String("salt"), + field.String("email").Unique().SchemaType(map[string]string{ + dialect.MySQL: "VARCHAR(30)", + }), + field.String("password").SchemaType(map[string]string{ + dialect.MySQL: "VARCHAR(80)", + }), + field.String("salt").SchemaType(map[string]string{ + dialect.MySQL: "VARCHAR(50)", + }), // 二进制状态位,保留 field.Int("state"), field.Int64("reg_time"), diff --git a/db/ent/schema/userprofile.go b/db/ent/schema/userprofile.go index e5c8f5e..949806f 100644 --- a/db/ent/schema/userprofile.go +++ b/db/ent/schema/userprofile.go @@ -2,6 +2,7 @@ package schema import ( "entgo.io/ent" + "entgo.io/ent/dialect" "entgo.io/ent/schema/edge" "entgo.io/ent/schema/field" "entgo.io/ent/schema/index" @@ -15,8 +16,12 @@ type UserProfile struct { // Fields of the UserProfile. func (UserProfile) Fields() []ent.Field { return []ent.Field{ - field.String("name").Unique(), - field.String("uuid"), + field.String("name").Unique().SchemaType(map[string]string{ + dialect.MySQL: "VARCHAR(20)", + }), + field.String("uuid").SchemaType(map[string]string{ + dialect.MySQL: "VARCHAR(32)", + }), } } diff --git a/db/ent/schema/usertoken.go b/db/ent/schema/usertoken.go index 6b56f71..c417e52 100644 --- a/db/ent/schema/usertoken.go +++ b/db/ent/schema/usertoken.go @@ -2,7 +2,9 @@ package schema import ( "entgo.io/ent" + "entgo.io/ent/dialect" "entgo.io/ent/schema/field" + "entgo.io/ent/schema/index" ) // UserToken holds the schema definition for the UserToken entity. @@ -15,7 +17,9 @@ func (UserToken) Fields() []ent.Field { return []ent.Field{ // 用于验证 jwt token 是否被注销,若相同则有效 field.Uint64("token_id"), - field.String("uuid"), + field.String("uuid").SchemaType(map[string]string{ + dialect.MySQL: "VARCHAR(32)", + }), } } @@ -23,3 +27,9 @@ func (UserToken) Fields() []ent.Field { func (UserToken) Edges() []ent.Edge { return nil } + +func (UserToken) Indexes() []ent.Index { + return []ent.Index{ + index.Fields("uuid"), + } +} diff --git a/model/model.go b/model/model.go index e718339..bd85d45 100644 --- a/model/model.go +++ b/model/model.go @@ -16,5 +16,6 @@ type User struct { type TokenClaims struct { Tid string `json:"tid"` + CID string `json:"cid"` jwt.RegisteredClaims } diff --git a/service/yggdrasil/authenticate.go b/service/yggdrasil/authenticate.go index a669afc..91e35ba 100644 --- a/service/yggdrasil/authenticate.go +++ b/service/yggdrasil/authenticate.go @@ -56,7 +56,7 @@ func (y *Yggdrasil) Authenticate(cxt context.Context, auth yggdrasil.Authenticat } } if utoken == nil { - ut, err := tx.UserToken.Create().SetTokenID(1).Save(cxt) + ut, err := tx.UserToken.Create().SetTokenID(1).SetUUID(u.Edges.Profile.UUID).Save(cxt) if err != nil { return err } @@ -74,6 +74,7 @@ func (y *Yggdrasil) Authenticate(cxt context.Context, auth yggdrasil.Authenticat claims := model.TokenClaims{ Tid: strconv.FormatUint(utoken.TokenID, 10), + CID: clientToken, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * 24 * time.Hour)), Issuer: "authlib-skin",