You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

88 lines
2.2 KiB

package login
import (
"encoding/json"
"errors"
"godocms/common"
"godocms/model"
"godocms/pkg/db"
"godocms/utils"
"time"
"gorm.io/gorm"
)
type PasswordLoginHandler struct {
loginParam *PasswordLoginParam
}
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 user, nil
}
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
})
if err != nil {
return user, err
}
return user, nil
}