public IHttpActionResult PostLogin(Login model) { //验证Android手机终端 IEnumerable <string> headerUuid = null; ActionContext.Request.Headers.TryGetValues("uuid", out headerUuid); if (headerUuid == null) { return(BadRequest("请从Android手机操作")); } string uuid = null; if (headerUuid != null) { uuid = headerUuid.ToList()[0]; } //验证数据 if (model == null) { return(BadRequest("请填写登录信息")); } if (!ModelState.IsValid) { return(BadRequest(ModelState.Values.First(s => s.Errors.Count > 0).Errors[0].ErrorMessage)); } Volunteer volunteer = db.Volunteers.FirstOrDefault(s => s.MobileNumber == model.MobileNumber && s.Status != EnumUserStatus.注销); //应为0个或1个 //验证是否已注册 if (volunteer == null) { return(BadRequest("该手机号码未注册")); } //验证账户是否锁定 if (volunteer.Status == EnumUserStatus.密码输入错误临时锁定) { if (volunteer.LockoutEndTime < DateTime.Now) { volunteer.Status = EnumUserStatus.正常; volunteer.LockoutStartTime = null; volunteer.LockoutDuration = 0; db.SaveChanges(); } else { return(BadRequest("账户被锁定")); } } //验证密码 if (volunteer.Password != SecurityHelper.MD5Hash(model.PassWord)) { return(BadRequest("密码不正确")); } //更新uuid if (uuid != null) { volunteer.Uuid = uuid; } VolunteerToken volunteerToken = db.VolunteerTokens.FirstOrDefault(s => s.VolunteerId == volunteer.Id); DateTime now = DateTime.UtcNow; string token = SecurityHelper.MD5Hash(volunteer.Id.ToString() + now.ToString() + Guid.NewGuid().ToString()); if (volunteerToken == null) { volunteerToken = new VolunteerToken { VolunteerId = volunteer.Id, CreateTime = now, ActiveTime = now, Token = token, Validity = 30 }; try { db.VolunteerTokens.Add(volunteerToken); db.Entry(volunteerToken).State = EntityState.Added; db.SaveChanges(); } catch { db.Entry(volunteerToken).State = EntityState.Unchanged; return(BadRequest("操作发生错误")); } } else { volunteerToken.ActiveTime = now; volunteerToken.Token = token; volunteerToken.Validity = 30; db.Entry(volunteerToken).State = EntityState.Modified; try { db.SaveChanges(); } catch { db.Entry(volunteerToken).State = EntityState.Unchanged; return(BadRequest("操作发生错误")); } } return(Ok(new { Token = token, Volunteer = VolunteerService.FormatUser(volunteer) })); }
public IHttpActionResult PostRegister(Register model) { DateTime now = DateTime.Now; //验证Andriod手机端 IEnumerable <string> headUuid = null; ActionContext.Request.Headers.TryGetValues("uuid", out headUuid); string uuid = null; if (headUuid != null) { uuid = headUuid.ToList()[0]; } //验证数据 if (model == null) { return(BadRequest("请填写注册信息")); } if (!ModelState.IsValid) { return(BadRequest(ModelState.Values.First(s => s.Errors.Count > 0).Errors[0].ErrorMessage)); } Volunteer volunteer = db.Volunteers.FirstOrDefault(s => s.MobileNumber == model.MobileNumber && s.Status != EnumUserStatus.注销); //未点击获取验证码 if (volunteer == null) { return(BadRequest("请获取验证码")); } //手机号码已注册 if (volunteer.Status == EnumUserStatus.注册未验证手机) { return(BadRequest("该手机号码已注册")); } //数据库中不存在验证码 if (string.IsNullOrEmpty(volunteer.SmsCaptcha)) { return(BadRequest("请获取验证码")); } //验证码用途不正确 if (!volunteer.SmsCaptchaUsedFor.HasValue || volunteer.SmsCaptchaUsedFor != EnumCaptchaUsedFor.志愿者注册) { return(BadRequest("验证码无效,请重新获取验证码")); } //验证码失效 if (volunteer.SmsCaptchaExpiredTime > now) { return(BadRequest("验证码失效,请重新获取")); } //验证码错误 if (volunteer.SmsCaptcha != model.Captcha) { return(BadRequest("验证码错误")); } //注册,生成token volunteer.Uuid = uuid; volunteer.Password = SecurityHelper.MD5Hash(model.PassWord); volunteer.SmsCaptcha = null; volunteer.SmsCaptchaExpiredTime = null; volunteer.SmsCaptchaUsedFor = null; volunteer.Status = EnumUserStatus.注册中; volunteer.RegisterTime = now; db.Entry(volunteer).State = EntityState.Modified; try { db.SaveChanges(); VolunteerToken volunteerToken = db.VolunteerTokens.FirstOrDefault(s => s.VolunteerId == volunteer.Id); string token = SecurityHelper.MD5Hash(volunteer.Id.ToString() + now.ToString() + Guid.NewGuid().ToString()); if (volunteerToken == null) { volunteerToken = new VolunteerToken { VolunteerId = volunteer.Id, Token = token, CreateTime = now, ActiveTime = now, Validity = 30 }; db.VolunteerTokens.Add(volunteerToken); db.SaveChanges(); } else { volunteerToken.ActiveTime = now; volunteerToken.Token = token; volunteerToken.Validity = 30; db.Entry(volunteerToken).State = EntityState.Modified; db.SaveChanges(); } return(Ok( new { Token = token, Volunteer = VolunteerService.FormatUser(volunteer) } )); } catch (Exception ex) { db.Entry(volunteer).State = EntityState.Unchanged; return(BadRequest("操作发生错误")); } }