| | |
| | | logger.warn("⚠️ unionid为空或用户已找到,跳过unionid查找"); |
| | | } |
| | | |
| | | // 4. 如果都没找到用户,不创建新用户,只记录登录信息 |
| | | // 4. 如果都没找到用户,为小程序访问创建匿名用户对象(不保存到数据库) |
| | | if (user == null) { |
| | | logger.info("未找到现有用户,普通访问用户不创建user记录,只记录登录信息"); |
| | | logger.info("未找到现有用户,为小程序访问创建匿名用户对象"); |
| | | logger.info("访问用户信息:"); |
| | | logger.info("- openid: {}", wxLoginRequest.getWxOpenid()); |
| | | logger.info("- unionid: {}", wxLoginRequest.getWxUnionid()); |
| | |
| | | throw new RuntimeException("创建登录记录失败: " + e.getMessage(), e); |
| | | } |
| | | |
| | | // 返回访问用户的响应(无用户信息,无token) |
| | | // 6. 为匿名用户生成特殊的JWT token(使用专门的wxopenid字段) |
| | | logger.info("步骤4: 为匿名用户生成JWT token"); |
| | | String token = null; |
| | | try { |
| | | // 使用特殊的用户ID(负数)来标识匿名用户,避免与真实用户ID冲突 |
| | | Long anonymousUserId = -Math.abs(wxLoginRequest.getWxOpenid().hashCode()) % 1000000L; |
| | | // 使用新的三参数方法:userId, phone(null), wxopenid |
| | | token = jwtUtil.generateToken(anonymousUserId, null, wxLoginRequest.getWxOpenid()); |
| | | logger.info("✅ 成功生成匿名用户JWT token,wxopenid: {}", wxLoginRequest.getWxOpenid()); |
| | | } catch (Exception e) { |
| | | logger.error("❌ 生成匿名用户JWT token失败: {}", e.getMessage()); |
| | | logger.error("异常堆栈:", e); |
| | | throw new RuntimeException("生成JWT token失败: " + e.getMessage(), e); |
| | | } |
| | | |
| | | // 7. 构建匿名用户信息 |
| | | logger.info("步骤5: 构建匿名用户信息响应"); |
| | | LoginResponse.UserInfo userInfo = new LoginResponse.UserInfo( |
| | | null, // userId为null,表示匿名用户 |
| | | "微信用户", // 默认名称 |
| | | null, // 没有电话号码 |
| | | "anonymous" // 用户类型为匿名 |
| | | ); |
| | | |
| | | // 返回匿名用户的响应(包含用户信息和token) |
| | | WxLoginResponse response = new WxLoginResponse(); |
| | | response.setSuccess(true); |
| | | response.setMessage("访问成功"); |
| | | response.setMessage("匿名访问成功"); |
| | | response.setToken(token); |
| | | response.setUserInfo(userInfo); |
| | | response.setSessionKey(wxLoginRequest.getSessionKey()); |
| | | response.setIsNewUser(false); |
| | | response.setHasEmployee(false); |
| | | response.setHasJudge(false); |
| | | response.setHasPlayer(false); |
| | | response.setLoginRecordId(loginRecord.getId()); |
| | | |
| | | logger.info("=== 微信访问流程完成(无用户创建) ==="); |
| | | logger.info("=== 微信匿名访问流程完成 ==="); |
| | | return response; |
| | | } |
| | | |
| | |
| | | |
| | | // 6. 生成JWT token |
| | | logger.info("步骤5: 生成JWT token"); |
| | | String tokenIdentifier = user.getPhone() != null ? user.getPhone() : user.getWxOpenid(); |
| | | logger.info("Token标识符: {}", tokenIdentifier); |
| | | logger.info("用户手机号: {}", user.getPhone()); |
| | | logger.info("用户wxopenid: {}", user.getWxOpenid()); |
| | | |
| | | String token = null; |
| | | try { |
| | | token = jwtUtil.generateToken(user.getId(), tokenIdentifier); |
| | | // 使用新的三参数方法:userId, phone, wxopenid |
| | | token = jwtUtil.generateToken(user.getId(), user.getPhone(), user.getWxOpenid()); |
| | | logger.info("✅ 成功生成JWT token,长度: {}", token != null ? token.length() : 0); |
| | | } catch (Exception e) { |
| | | logger.error("❌ 生成JWT token失败: {}", e.getMessage()); |