feat: update
This commit is contained in:
@@ -12,7 +12,6 @@ import (
|
||||
"quyun/providers/jwt"
|
||||
"quyun/providers/wechat"
|
||||
|
||||
"github.com/go-jet/jet/v2/qrm"
|
||||
"github.com/gofiber/fiber/v3"
|
||||
gonanoid "github.com/matoous/go-nanoid/v2"
|
||||
"github.com/pkg/errors"
|
||||
@@ -51,24 +50,31 @@ func (ctl *auth) Login(ctx fiber.Ctx, code, state, redirect string) error {
|
||||
|
||||
log.Debugf("Auth User Info: %+v", authUserInfo)
|
||||
|
||||
user, err := models.Users.GetUserByOpenID(ctx.Context(), token.Openid)
|
||||
userModel := &model.Users{
|
||||
Status: fields.UserStatusOk,
|
||||
OpenID: token.GetOpenID(),
|
||||
Username: fmt.Sprintf("u_%s", gonanoid.MustGenerate(salt, 8)),
|
||||
Avatar: nil,
|
||||
Metas: fields.ToJson(fields.UserMetas{
|
||||
City: authUserInfo.City,
|
||||
Country: authUserInfo.Country,
|
||||
HeadImageUrl: authUserInfo.Headimgurl,
|
||||
Nickname: authUserInfo.Nickname,
|
||||
Privilege: authUserInfo.Privilege,
|
||||
Province: authUserInfo.Province,
|
||||
Sex: authUserInfo.Sex,
|
||||
}),
|
||||
AuthToken: fields.ToJson(fields.UserAuthToken{
|
||||
AccessToken: token.AccessToken,
|
||||
ExpiresAt: time.Now().Add(time.Second * time.Duration(token.ExpiresIn)),
|
||||
IsSnapshotuser: token.IsSnapshotuser,
|
||||
RefreshToken: token.RefreshToken,
|
||||
Scope: token.Scope,
|
||||
}),
|
||||
}
|
||||
user, err := models.Users.GetUserByOpenIDOrCreate(ctx.Context(), token.Openid, userModel)
|
||||
if err != nil {
|
||||
if errors.Is(err, qrm.ErrNoRows) {
|
||||
// Create User
|
||||
model := &model.Users{
|
||||
Status: fields.UserStatusOk,
|
||||
OpenID: token.GetOpenID(),
|
||||
Username: fmt.Sprintf("u_%s", gonanoid.MustGenerate(salt, 8)),
|
||||
Avatar: nil,
|
||||
}
|
||||
|
||||
user, err = models.Users.Create(ctx.Context(), model)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to create user")
|
||||
}
|
||||
} else {
|
||||
return errors.Wrap(err, "failed to get user")
|
||||
}
|
||||
return errors.Wrap(err, "failed to get user by openid")
|
||||
}
|
||||
|
||||
jwtToken, err := ctl.jwt.CreateToken(ctl.jwt.CreateClaims(jwt.BaseClaims{UserID: user.ID}))
|
||||
|
||||
@@ -2,7 +2,6 @@ package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"quyun/app/requests"
|
||||
@@ -11,6 +10,7 @@ import (
|
||||
|
||||
. "github.com/go-jet/jet/v2/postgres"
|
||||
"github.com/go-jet/jet/v2/qrm"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/samber/lo"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
@@ -272,6 +272,24 @@ func (m *usersModel) GetUserByOpenID(ctx context.Context, openID string) (*model
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
// GetUserByOpenIDOrCreate
|
||||
func (m *usersModel) GetUserByOpenIDOrCreate(ctx context.Context, openID string, userModel *model.Users) (*model.Users, error) {
|
||||
user, err := m.GetUserByOpenID(ctx, openID)
|
||||
if err != nil {
|
||||
if errors.Is(err, qrm.ErrNoRows) {
|
||||
// Create User
|
||||
|
||||
user, err = m.Create(ctx, userModel)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to create user")
|
||||
}
|
||||
} else {
|
||||
return nil, errors.Wrap(err, "failed to get user")
|
||||
}
|
||||
}
|
||||
return user, nil
|
||||
}
|
||||
|
||||
// GetUsersMapByIDs
|
||||
func (m *usersModel) GetUsersMapByIDs(ctx context.Context, ids []int64) (map[int64]model.Users, error) {
|
||||
if len(ids) == 0 {
|
||||
|
||||
Reference in New Issue
Block a user