package controllers import ( "encoding/json" "eta/eta_mini_crm/models" "eta/eta_mini_crm/utils" "fmt" "time" "github.com/beego/beego/v2/client/orm" ) type UserLoginController struct { BaseCommonController } // Login // @Title 用户登录 // @Description 用户登录 // @Param request body UserLoginReq true "type json string" // @Success 200 {object} models.LoginResp // @router /login [post] func (this *UserLoginController) Login() { br := new(models.BaseResponse).Init() defer func() { if br.ErrMsg == "" { br.IsSendEmail = false } this.Data["json"] = br this.ServeJSON() }() type UserLoginReq struct { UserName string `description:"账号"` Password string `description:"密码"` ReqTime string `description:"登录时间戳"` } var req UserLoginReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.UserName == "" { br.Msg = "请输入账号" return } if req.Password == "" { br.Msg = "请输入密码" return } sysUser, err := models.GetSysUserBySysUserName(req.UserName) if err != nil { if err == orm.ErrNoRows { br.Msg = "登录失败, 账号或密码错误" return } else { br.Msg = "系统错误" br.ErrMsg = "系统错误" + err.Error() return } } dbPass := utils.MD5(fmt.Sprintf("%s%s%s", sysUser.Password, utils.UserLoginSalt, req.ReqTime)) if req.Password != dbPass { br.Msg = "登录失败, 账号或密码错误" return } account := utils.MD5(sysUser.SysUserName) token := utils.GenToken(account) sysSession := new(models.SysSession) sysSession.UserName = sysUser.SysUserName sysSession.SysUserId = sysUser.SysUserId sysSession.ExpiredTime = time.Now().AddDate(0, 0, 60) sysSession.CreatedTime = time.Now() sysSession.LastUpdatedTime = time.Now() sysSession.AccessToken = token err = sysSession.AddSysSession() if err != nil { br.Msg = "登录失败" br.ErrMsg = "新增session信息失败, Err:" + err.Error() return } sysRole, err := models.GetSysRoleById(sysUser.SysRoleId) if err != nil { br.Msg = "登录失败" br.ErrMsg = "查询角色失败, Err:" + err.Error() return } type LoginResp struct { Authorization string SysUserName string `description:"系统用户名"` SysRealName string `description:"系统用户姓名"` SysUserId int `description:"系统用户id"` RoleName string `description:"所属角色名称"` RoleId int `description:"所属角色id"` } resp := new(LoginResp) resp.Authorization = "authorization=" + token resp.SysUserName = sysUser.SysUserName resp.SysRealName = sysUser.SysRealName resp.SysUserId = sysUser.SysUserId resp.RoleName = sysRole.SysRoleName resp.RoleId = sysUser.SysRoleId br.Data = resp br.Ret = 200 br.Success = true br.Msg = "登录成功" }