package com.mindskip.xzs.controller.wechat.student; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.configuration.property.SystemConfig; import com.mindskip.xzs.controller.wechat.BaseWechatApiController; import com.mindskip.xzs.domain.UserToken; import com.mindskip.xzs.domain.enums.UserStatusEnum; import com.mindskip.xzs.service.AuthenticationService; import com.mindskip.xzs.service.UserService; import com.mindskip.xzs.service.UserTokenService; import com.mindskip.xzs.utility.WechatUtil; import com.mindskip.xzs.viewmodel.wechat.student.user.BindInfo; import com.mindskip.xzs.domain.User; import lombok.AllArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import javax.validation.constraints.NotBlank; /** * @version 2.2.0 * @description: 身份验证 * Copyright (C), 2020-2021, 武汉思维跳跃科技有限公司 * @date 2021 /9/7 9:45 */ @Controller("WechatStudentAuthController") @RequestMapping(value = "/api/wx/student/auth") @AllArgsConstructor @ResponseBody public class AuthController extends BaseWechatApiController { private final SystemConfig systemConfig; private final AuthenticationService authenticationService; private final UserService userService; private final UserTokenService userTokenService; /** * 用户绑定 * * @param model the model * @return the rest response */ @RequestMapping(value = "/bind", method = RequestMethod.POST) public RestResponse bind(@Valid BindInfo model) { User user = userService.getUserByUserName(model.getUserName()); if (user == null) { return RestResponse.fail(2, "用户名或密码错误"); } boolean result = authenticationService.authUser(user, model.getUserName(), model.getPassword()); if (!result) { return RestResponse.fail(2, "用户名或密码错误"); } UserStatusEnum userStatusEnum = UserStatusEnum.fromCode(user.getStatus()); if (UserStatusEnum.Disable == userStatusEnum) { return RestResponse.fail(3, "用户被禁用"); } String code = model.getCode(); String openid = WechatUtil.getOpenId(systemConfig.getWechat().getAppid(), systemConfig.getWechat().getSecret(), code); if (null == openid) { return RestResponse.fail(4, "获取微信OpenId失败"); } user.setWxOpenId(openid); UserToken userToken = userTokenService.bind(user); return RestResponse.ok(userToken.getToken()); } /** * 检查是否绑定 * * @param code the code * @return the rest response */ @RequestMapping(value = "/checkBind", method = RequestMethod.POST) public RestResponse checkBind(@Valid @NotBlank String code) { String openid = WechatUtil.getOpenId(systemConfig.getWechat().getAppid(), systemConfig.getWechat().getSecret(), code); if (null == openid) { return RestResponse.fail(3, "获取微信OpenId失败"); } UserToken userToken = userTokenService.checkBind(openid); if (null != userToken) { return RestResponse.ok(userToken.getToken()); } return RestResponse.fail(2, "用户未绑定"); } /** * 解绑 * * @return the rest response */ @RequestMapping(value = "/unBind", method = RequestMethod.POST) public RestResponse unBind() { UserToken userToken = getUserToken(); userTokenService.unBind(userToken); return RestResponse.ok(); } }