mirror of https://gitee.com/godoos/godoos.git
21 changed files with 273 additions and 150 deletions
@ -1,16 +1,28 @@ |
|||
package login |
|||
|
|||
import "errors" |
|||
import ( |
|||
"errors" |
|||
"fmt" |
|||
) |
|||
|
|||
type LoginHandlerFactory struct{} |
|||
|
|||
func (f *LoginHandlerFactory) GetHandler(loginType string) (LoginHandler, error) { |
|||
switch loginType { |
|||
// factory.go
|
|||
func (f *LoginHandlerFactory) GetHandler(req LoginRequest) (LoginHandler, error) { |
|||
var handler LoginHandler |
|||
|
|||
switch req.LoginType { |
|||
case LoginTypePassword: |
|||
return &PasswordLoginHandler{}, nil |
|||
handler = &PasswordLoginHandler{} |
|||
case LoginTypeSmsCode: |
|||
return &SmsCodeLoginHandler{}, nil |
|||
handler = &SmsCodeLoginHandler{} |
|||
default: |
|||
return nil, errors.New("unsupported login type") |
|||
} |
|||
|
|||
if err := handler.Init(req); err != nil { |
|||
return nil, fmt.Errorf("参数初始化失败: %v", err) |
|||
} |
|||
|
|||
return handler, nil |
|||
} |
|||
|
@ -1,22 +1,88 @@ |
|||
package login |
|||
|
|||
import ( |
|||
"encoding/json" |
|||
"errors" |
|||
"godocms/common" |
|||
"godocms/model" |
|||
"log" |
|||
"godocms/pkg/db" |
|||
"godocms/utils" |
|||
"time" |
|||
|
|||
"gorm.io/gorm" |
|||
) |
|||
|
|||
type PasswordLoginHandler struct{} |
|||
type PasswordLoginHandler struct { |
|||
loginParam *PasswordLoginParam |
|||
} |
|||
|
|||
func (h *PasswordLoginHandler) Login(param LoginParam) (*model.User, error) { |
|||
p := param.(PasswordLoginParam) |
|||
log.Printf("用户登录: %+v", p) |
|||
func (h *PasswordLoginHandler) Init(req LoginRequest) error { |
|||
//此处可以根据action处理不同的数据类型的解析
|
|||
h.loginParam = new(PasswordLoginParam) |
|||
return json.Unmarshal(req.Param, h.loginParam) |
|||
} |
|||
func (h *PasswordLoginHandler) Login() (user *model.User, err error) { |
|||
if !common.LoginConf.UserNameLogin.Enable { |
|||
return nil, errors.New("登录已关闭") |
|||
} |
|||
//log.Printf("用户登录: %+v", h.loginParam.Password)
|
|||
user = new(model.User) |
|||
if err := db.DB.Where("username = ?", h.loginParam.Username).First(&user).Error; err != nil { |
|||
return nil, errors.New("用户不存在") |
|||
} |
|||
if utils.HashPassword(h.loginParam.Password, user.Salt) != user.Password { |
|||
return nil, errors.New("密码错误") |
|||
} |
|||
// 实现短信验证码登录逻辑
|
|||
return nil, nil |
|||
return user, nil |
|||
} |
|||
|
|||
func (h *PasswordLoginHandler) Register(param LoginParam) (*model.User, error) { |
|||
p := param.(PasswordLoginParam) |
|||
log.Printf("用户登录: %+v", p) |
|||
func (h *PasswordLoginHandler) Register() (user *model.User, err error) { |
|||
//log.Printf("用户登录: %+v", h.loginParam)
|
|||
// 检查用户名和邮箱是否已存在
|
|||
var existingUser model.User |
|||
result := db.DB.Where("username = ?", h.loginParam.Username).First(&existingUser) |
|||
if result.RowsAffected > 0 { |
|||
return nil, errors.New("用户名或邮箱/手机号已存在") |
|||
} |
|||
salt, err := utils.GenerateSalt(16) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
hashedPassword := utils.HashPassword(h.loginParam.Password, salt) |
|||
user = &model.User{ |
|||
Username: h.loginParam.Username, |
|||
Password: hashedPassword, |
|||
Salt: salt, |
|||
Email: "", |
|||
Nickname: h.loginParam.Username, |
|||
Phone: "", |
|||
RoleId: 1, |
|||
Status: 0, |
|||
DeptId: 1, |
|||
AddTime: int32(time.Now().Unix()), |
|||
UpTime: 0, |
|||
} |
|||
|
|||
err = db.DB.Transaction(func(tx *gorm.DB) error { |
|||
if err := tx.Create(&user).Error; err != nil { |
|||
return err |
|||
} |
|||
|
|||
thirdInfo := &model.UserThird{ |
|||
UserID: user.ID, |
|||
Platform: LoginPlatformPassword, |
|||
ThirdUserID: h.loginParam.Username, |
|||
UnionID: h.loginParam.Username, |
|||
} |
|||
if err := tx.Create(thirdInfo).Error; err != nil { |
|||
return err |
|||
} |
|||
|
|||
return nil, nil |
|||
return nil |
|||
}) |
|||
if err != nil { |
|||
return user, err |
|||
} |
|||
return user, nil |
|||
} |
|||
|
@ -1,22 +1,27 @@ |
|||
package login |
|||
|
|||
import ( |
|||
"encoding/json" |
|||
"godocms/model" |
|||
"log" |
|||
) |
|||
|
|||
type SmsCodeLoginHandler struct{} |
|||
type SmsCodeLoginHandler struct { |
|||
param *SmsCodeLoginParam |
|||
} |
|||
|
|||
func (h *SmsCodeLoginHandler) Login(param LoginParam) (*model.User, error) { |
|||
p := param.(SmsCodeLoginParam) |
|||
log.Printf("手机号登录: %+v", p) |
|||
func (h *SmsCodeLoginHandler) Init(req LoginRequest) error { |
|||
h.param = new(SmsCodeLoginParam) |
|||
return json.Unmarshal(req.Param, h.param) |
|||
} |
|||
func (h *SmsCodeLoginHandler) Login() (*model.User, error) { |
|||
log.Printf("用户登录: %+v", h.param) |
|||
// 实现短信验证码登录逻辑
|
|||
return nil, nil |
|||
} |
|||
|
|||
func (h *SmsCodeLoginHandler) Register(param LoginParam) (*model.User, error) { |
|||
p := param.(SmsCodeLoginParam) |
|||
log.Printf("手机号登录: %+v", p) |
|||
func (h *SmsCodeLoginHandler) Register() (*model.User, error) { |
|||
log.Printf("用户登录: %+v", h.param) |
|||
// 实现短信验证码注册逻辑
|
|||
return nil, nil |
|||
} |
|||
|
@ -1 +1 @@ |
|||
exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1 |
|||
exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1 |
Binary file not shown.
Loading…
Reference in new issue