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.
 
 
 
 
 
 

76 lines
2.0 KiB

package login
import (
"encoding/json"
"errors"
"godocms/common"
"godocms/model"
"godocms/service"
"godocms/utils"
"time"
)
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, err = service.GetUserByUsername(h.loginParam.Username)
if err != nil {
return nil, err
}
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)
// 检查用户名和邮箱是否已存在
//log.Printf("=====用户登录: %+v", h.loginParam)
existingUser, err := service.GetUserByUsername(h.loginParam.Username)
// log.Printf("=====用户登录: %+v", existingUser)
// log.Printf("=====用户登录: %+v", err)
if err == nil || existingUser != nil {
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,
}
thirdInfo := &model.UserThird{
Platform: LoginPlatformPassword,
ThirdUserID: h.loginParam.Username,
UnionID: h.loginParam.Username,
}
user, err = service.AddUser(user, thirdInfo)
if err != nil {
return user, err
}
return user, nil
}