oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java
@@ -12,6 +12,10 @@ private String appId; // APP密钥 private String appSecret; // 骑手小程序APPID private String riderAppId; // 骑手小程序密钥 private String riderAppSecret; // 跳转小程序类型 private String miniProgramState; /*access_token的KEY*/ oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java
@@ -224,6 +224,74 @@ user1.setRoles(roles); } @Log("骑手小程序:微信授权登录") @ApiOperation("骑手小程序:微信授权登录") @AnonymousPostMapping(value = "/rider/login/weixin") public ResponseEntity<Object> riderLoginWeixin(@Validated @RequestBody AuthUserWeixinDto authUser, HttpServletRequest request) throws Exception { JSONObject jsonObject; switch (authUser.getType()) { case OLD: jsonObject = weiXinService.code2SessionRider(authUser.getCode()); String openid = jsonObject.getString("openid"); User userDto = userService.findByRiderOpenId(openid); if (userDto == null) { return ResponseEntity.ok(R.success(openid)); } authUser.setUsername(userDto.getUsername()); break; case NEW: jsonObject = weiXinService.getPhoneNumber(authUser.getCode()); String phone = jsonObject.getJSONObject("phone_info").getString("purePhoneNumber"); User user1 = userService.findByName(phone); if (user1 == null) { //创建用户 User user = new User(); user.setUsername(phone); user.setNickName("OYING-" + phone); user.setUserType(ConstantsKey.RIDER); user.setPhone(phone); user.setGender("男"); user.setEnabled(true); getRole(user); user.setPassword(passwordEncoder.encode(phone.substring(phone.length() - 6))); user.setOpenid(authUser.getUsername()); userService.create(user); } else { if (user1.getUserType().equals(ConstantsKey.RIDER)) { if (user1.getRoles() == null) { getRole(user1); } } user1.setOpenid(authUser.getUsername()); userService.update(user1); } authUser.setUsername(phone); break; default: throw new BadRequestException("登录类型错误"); } // 获取用户信息 JwtUserDto jwtUser = userDetailsService.loadUserByUsername(authUser.getUsername()); Authentication authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); // 生成令牌 String token = tokenProvider.createToken(jwtUser); // 返回 token 与 用户信息 Map<String, Object> authInfo = new HashMap<String, Object>(2) {{ put("token", properties.getTokenStartWith() + token); put("user", jwtUser); }}; if (loginProperties.isSingleLogin()) { // 踢掉之前已经登录的token onlineUserService.kickOutForUsername(authUser.getUsername()); } // 保存在线信息 onlineUserService.save(jwtUser, token, request); // 返回登录信息 return ResponseEntity.ok(R.success(authInfo)); } @ApiOperation("临时授权") @AnonymousGetMapping(value = "/token") public ResponseEntity<Object> loginTest(@RequestParam String username, HttpServletRequest request) { oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java
@@ -72,6 +72,14 @@ return JSONObject.parseObject(HttpRequest.exchangeString(HttpMethod.GET, url, null)); } public JSONObject code2SessionRider(String js_code) { String url = weiXinProperties.getCode2Session(); url = url.replace("{appid}", weiXinProperties.getRiderAppId()) .replace("{secret}", weiXinProperties.getRiderAppSecret()) .replace("{js_code}", js_code); return JSONObject.parseObject(HttpRequest.exchangeString(HttpMethod.GET, url, null)); } /** * POST 获取手机号 该接口用于将code换取用户手机号。 说明,每个code只能使用一次,code的有效期为5min。 * oying-system/src/main/java/com/oying/modules/system/domain/User.java
@@ -77,6 +77,10 @@ @ApiModelProperty(value = "最后修改密码的时间", hidden = true) private Date pwdResetTime; @ApiModelProperty(value = "骑手openid") private String riderOpenId; @Override public boolean equals(Object o) { if (this == o) { oying-system/src/main/java/com/oying/modules/system/mapper/UserMapper.java
@@ -29,6 +29,8 @@ User findByOpenid(@Param("openid") String openid); User findByRiderOpenId(@Param("riderOpenId") String riderOpenId); User findByEmail(@Param("email") String email); User findByPhone(@Param("phone") String phone); @@ -48,4 +50,5 @@ int countByRoles(@Param("roleIds") Set<Long> roleIds); void resetPwd(@Param("userIds") Set<Long> userIds, @Param("pwd") String pwd); } oying-system/src/main/java/com/oying/modules/system/service/UserService.java
@@ -55,6 +55,8 @@ User findByOpenid(String openId); User findByRiderOpenId(String riderOpenId); /** * 根据用户名查询 * @param userName / @@ -120,4 +122,5 @@ * @param pwd 密码 */ void resetPwd(Set<Long> ids, String pwd); } oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java
@@ -174,6 +174,11 @@ } @Override public User findByRiderOpenId(String riderOpenId) { return userMapper.findByRiderOpenId(riderOpenId); } @Override public User getLoginData(String userName) { return userMapper.findByUsername(userName); } oying-system/src/main/resources/config/application-dev.yml
@@ -132,6 +132,10 @@ app-id: wx2273296a5569cbad # AppSecret app-secret: 4526d72d885be322b17d0694cd6d03f1 # riderAppId rider-app-id: wx2273296a5569cbad # riderAppSecret rider-app-secret: 4526d72d885be322b17d0694cd6d03f1 # 跳转小程序类型 developer为开发版;trial为体验版;formal为正式版;默认为正式版 mini-program-state: trial # access_token的KEY oying-system/src/main/resources/config/application-prod.yml
@@ -143,6 +143,10 @@ app-id: wx2273296a5569cbad # AppSecret app-secret: 4526d72d885be322b17d0694cd6d03f1 # riderAppId rider-app-id: wx2273296a5569cbad # riderAppSecret rider-app-secret: 4526d72d885be322b17d0694cd6d03f1 # 跳转小程序类型 developer为开发版;trial为体验版;formal为正式版;默认为正式版 mini-program-state: trial # access_token的KEY oying-system/src/main/resources/mapper/system/UserMapper.xml
@@ -6,6 +6,7 @@ <result column="user_username" property="username"/> <result column="user_user_type" property="userType"/> <result column="user_openid" property="openid"/> <result column="user_rider_open_id" property="riderOpenId"/> <result column="user_nick_name" property="nickName"/> <result column="user_email" property="email"/> <result column="user_phone" property="phone"/> @@ -30,7 +31,7 @@ <sql id="Base_Column_List"> u.user_id as user_user_id, u.username as user_username, u.user_type as user_user_type,u.openid as user_openid, u.user_type as user_user_type,u.openid as user_openid,u.rider_open_id as user_rider_open_id, u.nick_name as user_nick_name, u.email as user_email, u.phone as user_phone, u.gender as user_gender, u.avatar_name as user_avatar_name, u.avatar_path as user_avatar_path, u.enabled as user_enabled, u.pwd_reset_time as user_pwd_reset_time, u.create_by as user_create_by, @@ -108,6 +109,14 @@ where u.openid = #{openid} </select> <select id="findByRiderOpenId" resultMap="BaseResultMap"> select u.password user_password, u.is_admin user_is_admin, <include refid="Base_Column_List"/> from sys_user u where u.rider_open_id = #{riderOpenId} </select> <select id="findByEmail" resultType="com.oying.modules.system.domain.User"> select user_id as id, username from sys_user where email = #{email}