feat: 实现邮箱验证码登录功能,支持新用户自动注册并记录登录日志
Build docker and publish / build (20.15.1) (push) Successful in 5m40s
Build docker and publish / build (20.15.1) (push) Successful in 5m40s
This commit is contained in:
@@ -84,6 +84,29 @@ func (m *defaultUserModel) DeleteUserAuthMethods(ctx context.Context, userId int
|
||||
})
|
||||
}
|
||||
|
||||
func (m *defaultUserModel) DeleteUserAuthMethodByIdentifier(ctx context.Context, userId int64, platform, identifier string, tx ...*gorm.DB) error {
|
||||
u, err := m.FindOne(ctx, userId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err = m.ClearUserCache(context.Background(), u); err != nil {
|
||||
logger.Errorf("[UserModel] clear user cache failed: %v", err.Error())
|
||||
}
|
||||
}()
|
||||
|
||||
return m.ExecNoCacheCtx(ctx, func(conn *gorm.DB) error {
|
||||
if len(tx) > 0 {
|
||||
conn = tx[0]
|
||||
}
|
||||
// Delete by user_id, auth_type AND auth_identifier
|
||||
return conn.Model(&AuthMethods{}).
|
||||
Where("user_id = ? AND auth_type = ? AND auth_identifier = ?", userId, platform, identifier).
|
||||
Delete(&AuthMethods{}).Error
|
||||
})
|
||||
}
|
||||
|
||||
func (m *defaultUserModel) FindUserAuthMethodByUserId(ctx context.Context, method string, userId int64) (*AuthMethods, error) {
|
||||
var data AuthMethods
|
||||
err := m.QueryNoCacheCtx(ctx, &data, func(conn *gorm.DB, v interface{}) error {
|
||||
|
||||
@@ -96,6 +96,7 @@ type customUserLogicModel interface {
|
||||
FindUserAuthMethodByOpenID(ctx context.Context, method, openID string) (*AuthMethods, error)
|
||||
FindUserAuthMethodByUserId(ctx context.Context, method string, userId int64) (*AuthMethods, error)
|
||||
FindUserAuthMethodByPlatform(ctx context.Context, userId int64, platform string) (*AuthMethods, error)
|
||||
DeleteUserAuthMethodByIdentifier(ctx context.Context, userId int64, platform, identifier string, tx ...*gorm.DB) error
|
||||
FindOneByEmail(ctx context.Context, email string) (*User, error)
|
||||
FindOneDevice(ctx context.Context, id int64) (*Device, error)
|
||||
QueryDeviceList(ctx context.Context, userid int64) ([]*Device, int64, error)
|
||||
@@ -134,27 +135,27 @@ func (m *customUserModel) QueryPageList(ctx context.Context, page, size int, fil
|
||||
var list []*User
|
||||
var total int64
|
||||
err := m.QueryNoCacheCtx(ctx, &list, func(conn *gorm.DB, v interface{}) error {
|
||||
if filter != nil {
|
||||
if filter.UserId != nil {
|
||||
conn = conn.Where("user.id =?", *filter.UserId)
|
||||
}
|
||||
if filter.Search != "" {
|
||||
conn = conn.Joins("LEFT JOIN user_auth_methods ON user.id = user_auth_methods.user_id").
|
||||
Where("user_auth_methods.auth_identifier LIKE ?", "%"+filter.Search+"%").Or("user.refer_code like ?", "%"+filter.Search+"%")
|
||||
}
|
||||
if filter.DeviceId != "" {
|
||||
conn = conn.Joins("LEFT JOIN user_device ON user.id = user_device.user_id")
|
||||
if id, err := strconv.ParseInt(filter.DeviceId, 10, 64); err == nil {
|
||||
conn = conn.Where("user_device.id = ? OR user_device.identifier = ?", id, filter.DeviceId)
|
||||
} else {
|
||||
conn = conn.Where("user_device.identifier = ?", filter.DeviceId)
|
||||
if filter != nil {
|
||||
if filter.UserId != nil {
|
||||
conn = conn.Where("user.id =?", *filter.UserId)
|
||||
}
|
||||
}
|
||||
if filter.UserSubscribeId != nil {
|
||||
conn = conn.Joins("LEFT JOIN user_subscribe ON user.id = user_subscribe.user_id").
|
||||
Where("user_subscribe.id =? and `status` IN (0,1)", *filter.UserSubscribeId)
|
||||
}
|
||||
if filter.SubscribeId != nil {
|
||||
if filter.Search != "" {
|
||||
conn = conn.Joins("LEFT JOIN user_auth_methods ON user.id = user_auth_methods.user_id").
|
||||
Where("user_auth_methods.auth_identifier LIKE ?", "%"+filter.Search+"%").Or("user.refer_code like ?", "%"+filter.Search+"%")
|
||||
}
|
||||
if filter.DeviceId != "" {
|
||||
conn = conn.Joins("LEFT JOIN user_device ON user.id = user_device.user_id")
|
||||
if id, err := strconv.ParseInt(filter.DeviceId, 10, 64); err == nil {
|
||||
conn = conn.Where("user_device.id = ? OR user_device.identifier = ?", id, filter.DeviceId)
|
||||
} else {
|
||||
conn = conn.Where("user_device.identifier = ?", filter.DeviceId)
|
||||
}
|
||||
}
|
||||
if filter.UserSubscribeId != nil {
|
||||
conn = conn.Joins("LEFT JOIN user_subscribe ON user.id = user_subscribe.user_id").
|
||||
Where("user_subscribe.id =? and `status` IN (0,1)", *filter.UserSubscribeId)
|
||||
}
|
||||
if filter.SubscribeId != nil {
|
||||
conn = conn.Joins("LEFT JOIN user_subscribe ON user.id = user_subscribe.user_id").
|
||||
Where("user_subscribe.subscribe_id =? and `status` IN (0,1)", *filter.SubscribeId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user