add sms enable option

v3
veypi 2 months ago
parent 95eccc2cde
commit 67b92662d1

@ -12,6 +12,7 @@ import (
"github.com/veypi/OneAuth/api/sms"
"github.com/veypi/OneAuth/api/token"
"github.com/veypi/OneAuth/api/user"
"github.com/veypi/OneAuth/cfg"
"github.com/veypi/OneAuth/libs/auth"
"github.com/vyes-ai/vigo"
"github.com/vyes-ai/vigo/contrib/common"
@ -24,8 +25,15 @@ var (
_ = Router.Extend("token", token.Router)
_ = Router.Extend("app", app.Router)
_ = Router.Extend("sms", sms.Router)
_ = Router.Get("cfg", vigo.SkipBefore, getCfg)
)
var _ = Router.Any("*", vigo.SkipBefore, func(x *vigo.X) error {
return vigo.ErrNotFound
})
func getCfg(x *vigo.X) any {
return map[string]any{
"sms": cfg.Config.SMS.Enable,
}
}

@ -10,11 +10,10 @@ package user
import (
"encoding/base64"
"fmt"
"math/rand"
"strings"
"time"
"math/rand"
"github.com/google/uuid"
"github.com/veypi/OneAuth/api/sms"
"github.com/veypi/OneAuth/cfg"
@ -47,12 +46,14 @@ func userPost(x *vigo.X) (any, error) {
data := &models.User{}
data.ID = strings.ReplaceAll(uuid.New().String(), "-", "")
if cfg.Config.SMS.Enable {
data.Phone = opts.Region + opts.Phone
data.Region = opts.Region
err = sms.VerifyCode(opts.Phone, opts.VerifyCode, opts.Region, "signup")
if err != nil {
return nil, vigo.ErrArgInvalid.WithArgs("verify code").WithString(err.Error())
}
}
data.Username = opts.Username
data.Code = opts.Code
data.Salt = utils.RandSeq(16)

@ -4,15 +4,15 @@ import (
"time"
)
// Config 短信验证码配置
// SMSConfig 短信验证码配置
type SMSConfig struct {
// 区域配置 +86/.../global
Regions map[string]RegionConfig `json:"regions"`
Default RegionConfig `json:"default"` // 默认区域配置
// 全局配置
Global GlobalConfig `json:"global"`
Enable bool `json:"enable"`
}
// RegionConfig 区域配置
@ -37,6 +37,7 @@ type GlobalConfig struct {
// DefaultConfig 默认配置
func defaultSMS() *SMSConfig {
return &SMSConfig{
Enable: true,
Global: GlobalConfig{
CodeLength: 6,
CodeExpiry: 5 * time.Minute,

@ -16,9 +16,11 @@ import (
"github.com/vyes-ai/vigo/logv"
)
var cmdMain = flags.New("app", "the backend server of app")
var cmdCfg = cmdMain.SubCommand("cfg", "generate cfg file")
var cmdDB = cmdMain.SubCommand("db", "database operations")
var (
cmdMain = flags.New("app", "the backend server of app")
cmdCfg = cmdMain.SubCommand("cfg", "generate cfg file")
cmdDB = cmdMain.SubCommand("db", "database operations")
)
var configFile = cmdMain.String("f", "./dev.yaml", "the config file")
@ -36,7 +38,7 @@ func init() {
cmdMain.StringVar(&cliOpts.Host, "host", "0.0.0.0", "host")
cmdMain.IntVar(&cliOpts.Port, "p", 4000, "port")
cmdMain.StringVar(&cliOpts.LoggerLevel, "l", "info", "log level")
cmdMain.AutoRegister(cliOpts)
cmdMain.AutoRegister(cfg.Config)
cmdMain.Before = func() error {
flags.LoadCfg(*configFile, cfg.Config)

@ -16,7 +16,7 @@ require (
github.com/golang-jwt/jwt/v5 v5.2.3
github.com/google/uuid v1.6.0
github.com/veypi/vyes-ui v0.0.0-00010101000000-000000000000
github.com/vyes-ai/vigo v0.5.0
github.com/vyes-ai/vigo v0.5.2
golang.org/x/crypto v0.40.0
gorm.io/driver/mysql v1.6.0
gorm.io/driver/postgres v1.6.0

@ -26,10 +26,12 @@ export default ($env) => {
}
};
$env.$axios.interceptors.response.use(function(response) {
console.log(response)
return response?.data || response;
}, function(error) {
error = error?.response?.data || error?.response || error
return Promise.reject(error);
});
$env.$axios.get('/api/cfg').then(res => {
$env.$G.cfg = res
})
}

@ -403,7 +403,7 @@
<input type="text" placeholder="用户名" v:value="signUpForm.username" class="input-group" required />
<!-- 手机号输入框带区域选择 -->
<div class="phone-input-group">
<div v-if='$G.cfg.sms' class="phone-input-group">
<select class="region-select" v:value="signUpForm.region">
<option v-for="region in regions" :value="region.code" :disabled='!region.enabled'>
{{ region.code }} {{region.name}}</option>
@ -411,7 +411,7 @@
<input type="text" placeholder="手机号" v:value="signUpForm.phone" class="phone-input" required />
</div>
<div class="input-group">
<div v-if='$G.cfg.sms' class="input-group">
<input type="text" placeholder="验证码" v:value="signUpForm.verifyCode" class="verify-code-input" required />
<button type="button" class="verify-code-btn" @click="sendVerifyCode('signup')"
:disabled="smsCountdown > 0 || smsLoading">
@ -683,11 +683,11 @@
signUpError = '';
// 验证用户名
if (signUpForm.username.length < 6) {
if (signUpForm.username.length < 5) {
signUpError = '用户名必须大于5位。';
return;
}
if ($G.cfg.sms) {
// 验证手机号
if (!validatePhone(signUpForm.phone, signUpForm.region)) {
signUpError = '请输入正确的手机号格式。';
@ -699,6 +699,8 @@
signUpError = '请输入验证码。';
return;
}
}
// 验证密码
if (!validatePassword(signUpForm.password)) {

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>oa</title>
<script type="module" key='vyes' src="/vyes/v.js"></script>
<script type="module" key='vyes' src="/assets/vyes.min.js"></script>
<link rel="stylesheet" href="/assets/common.css">
<link href="/assets/libs/tailwind/tailwind.min.css" rel="stylesheet">
<link href="/assets/libs/animate/animate.min.css" rel="stylesheet">

@ -7,6 +7,8 @@
class TokenService {
#url = '/'
#login_url = '/login'
#refresh_url = '/api/token'
constructor() {
this.tokenKey = 'access';
this.refreshTokenKey = 'refresh';

Loading…
Cancel
Save