package com.qxgmat.controller.api; import com.nuliji.tools.Response; import com.nuliji.tools.ResponseHelp; import com.nuliji.tools.Transform; import com.nuliji.tools.exception.ParameterException; import com.nuliji.tools.exception.SystemException; import com.qxgmat.data.dao.entity.User; import com.qxgmat.dto.request.*; import com.qxgmat.dto.response.MyDto; import com.qxgmat.help.CaptchaHelp; import com.qxgmat.help.ShiroHelp; import com.qxgmat.help.SmsHelp; import com.qxgmat.service.UsersService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.validation.Validator; /** * Created by GaoJie on 2017/10/31. */ @RestController @RequestMapping("/api/auth") @Api(tags = "用户验证", description = "登录注册找回密码", produces = MediaType.APPLICATION_JSON_VALUE) public class AuthController { @Autowired private Validator validator; @Autowired private CaptchaHelp captchaHelp; @Autowired private SmsHelp smsHelp; @Autowired private ShiroHelp shiroHelp; @Autowired private UsersService usersService; @RequestMapping(value = "/login", method = RequestMethod.POST) @ApiOperation(value = "登录/注册", httpMethod = "POST") public Response<MyDto> login(@RequestBody @Validated UserLoginDto userLoginDto, HttpSession session, HttpServletRequest request) { if (!smsHelp.verifyCode(userLoginDto.getMobile(), userLoginDto.getMobileVerifyCode(), session)) { throw new ParameterException("手机验证码错误!"); } try { User user = usersService.register(userLoginDto.getMobile(), userLoginDto.getInviteCode(), null); }catch (ParameterException e){ // 忽略已注册信息 } shiroHelp.getSession().login(shiroHelp.user(userLoginDto.getMobile(), "")); return ResponseHelp.success(Transform.convert(shiroHelp.getLoginUser(), MyDto.class)); } @RequestMapping(value = "/logout", method = RequestMethod.POST) @ApiOperation(value = "登出", httpMethod = "POST") public Response<Boolean> logout(HttpSession session, HttpServletRequest request) { shiroHelp.logout(); return ResponseHelp.success(true); } @RequestMapping(value = "/bind", method = RequestMethod.POST) @ApiOperation(value = "绑定手机号", notes="第三方登录后可执行", httpMethod = "POST") public Response<Boolean> bind(@RequestBody @Validated UserValidMobileDto userValidMobileDto, HttpSession session) { if (!smsHelp.verifyCode(userValidMobileDto.getMobile(), userValidMobileDto.getMobileVerifyCode(), session)) { throw new ParameterException("手机验证码错误!"); } User openUser = (User) shiroHelp.getLoginUser(); if(openUser == null) throw new SystemException("第三方登录错误"); if(openUser.getMobile().length() > 0) throw new SystemException("手机号已绑定"); try{ // 创建新的账号,设定手机号,绑定第三方登录 User user = usersService.register(userValidMobileDto.getMobile(), userValidMobileDto.getInviteCode(), openUser); }catch (ParameterException e){ throw new ParameterException("该手机号已注册,请通过手机号进行登录!"); } return ResponseHelp.success(true); } @RequestMapping(value = "/valid/invite_code", method = RequestMethod.GET) @ApiOperation(value = "验证邀请码", notes="查询邀请码对应账号", httpMethod = "GET") public Response<String> validInviteCode( @RequestParam(required = true) String inviteCode ){ User user = usersService.getByInviteCode(inviteCode); if(user == null){ return ResponseHelp.success(null); }else{ return ResponseHelp.success(user.getNickname()); } } @RequestMapping(value = "/valid/mobile", method = RequestMethod.GET) @ApiOperation(value = "验证手机号", notes="查询手机对应账号", httpMethod = "GET") public Response<Boolean> validMobile( @RequestParam(required = true) String mobile ){ User user = usersService.getByMobile(mobile); if(user == null){ return ResponseHelp.success(false); }else{ return ResponseHelp.success(true); } } }