|
|
|
|
@ -7,6 +7,9 @@
|
|
|
|
|
package auth
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"regexp"
|
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
baseauth "github.com/veypi/vbase/auth"
|
|
|
|
|
"github.com/veypi/vbase/cfg"
|
|
|
|
|
"github.com/veypi/vbase/libs/crypto"
|
|
|
|
|
@ -15,6 +18,9 @@ import (
|
|
|
|
|
"github.com/veypi/vigo"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Email 正则表达式
|
|
|
|
|
var emailRegex = regexp.MustCompile(`^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$`)
|
|
|
|
|
|
|
|
|
|
// RegisterRequest 注册请求
|
|
|
|
|
type RegisterRequest struct {
|
|
|
|
|
Username string `json:"username" src:"json" desc:"用户名"`
|
|
|
|
|
@ -26,6 +32,31 @@ type RegisterRequest struct {
|
|
|
|
|
|
|
|
|
|
// register 用户注册
|
|
|
|
|
func register(x *vigo.X, req *RegisterRequest) (*AuthResponse, error) {
|
|
|
|
|
// 验证用户名
|
|
|
|
|
if strings.TrimSpace(req.Username) == "" {
|
|
|
|
|
return nil, vigo.ErrInvalidArg.WithString("username is required")
|
|
|
|
|
}
|
|
|
|
|
if len(req.Username) < 3 || len(req.Username) > 50 {
|
|
|
|
|
return nil, vigo.ErrInvalidArg.WithString("username must be between 3 and 50 characters")
|
|
|
|
|
}
|
|
|
|
|
// 用户名只能包含字母、数字和下划线
|
|
|
|
|
if !regexp.MustCompile(`^[a-zA-Z0-9_]+$`).MatchString(req.Username) {
|
|
|
|
|
return nil, vigo.ErrInvalidArg.WithString("username can only contain letters, numbers and underscores")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 验证密码
|
|
|
|
|
if strings.TrimSpace(req.Password) == "" {
|
|
|
|
|
return nil, vigo.ErrInvalidArg.WithString("password is required")
|
|
|
|
|
}
|
|
|
|
|
if len(req.Password) < 8 {
|
|
|
|
|
return nil, vigo.ErrInvalidArg.WithString("password must be at least 8 characters")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 验证邮箱格式
|
|
|
|
|
if req.Email != "" && !emailRegex.MatchString(req.Email) {
|
|
|
|
|
return nil, vigo.ErrInvalidArg.WithString("invalid email format")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查注册配置
|
|
|
|
|
requireEmail, _ := models.GetSettingBool(models.SettingAuthRegRequireEmail)
|
|
|
|
|
requirePhone, _ := models.GetSettingBool(models.SettingAuthRegRequirePhone)
|
|
|
|
|
|