|
|
@@ -21,11 +21,14 @@ import java.time.LocalDateTime;
|
|
|
|
|
|
/**
|
|
|
* 认证服务实现类
|
|
|
+ * 用于处理微信小程序登录认证
|
|
|
*
|
|
|
* 完整登录流程:
|
|
|
- * 1. wxSilentLogin - 检查是否为老用户(根据openid)
|
|
|
- * 2. wxPhoneCheck - 验证手机号(解密获取手机号)
|
|
|
- * 3. wxCompleteUserInfo - 完善用户信息(创建新用户)
|
|
|
+ * 1. 静默登录:wx.login() -> POST /v1/auth/wx/silent-login(老用户直接返回token)
|
|
|
+ * 2. 新用户获取头像昵称:前端弹窗选择头像和输入昵称
|
|
|
+ * 3. 手机号授权:getPhoneNumber -> POST /v1/auth/wx/phone-verify(已注册用户返回token,未注册返回openid等信息)
|
|
|
+ * 4. 完善用户信息:头像+昵称+手机号 -> POST /v1/auth/wx/register(创建新用户,返回token)
|
|
|
+ * 5. 获取用户信息:token -> GET /v1/user/info
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
@@ -43,9 +46,11 @@ public class AuthServiceImpl implements AuthService {
|
|
|
private static final int INITIAL_POINTS = 10;
|
|
|
|
|
|
/**
|
|
|
- * 第一步:微信静默登录(检查是否为老用户)
|
|
|
+ * 第一步:微信静默登录
|
|
|
+ * 小程序调用 wx.login() 获取 code,发送到后端检查是否为老用户
|
|
|
+ *
|
|
|
* @param loginCode 微信登录code
|
|
|
- * @return 老用户返回token,新用户返回isSign=false
|
|
|
+ * @return 老用户返回 isSign=true + token,新用户返回 isSign=false
|
|
|
*/
|
|
|
@Override
|
|
|
public WxLoginCheckVO wxSilentLogin(String loginCode) {
|
|
|
@@ -84,7 +89,7 @@ public class AuthServiceImpl implements AuthService {
|
|
|
}
|
|
|
|
|
|
// 5. 老用户,生成token并返回
|
|
|
- String token = jwtUtil.generateToken(user.getId(), user.getPhone());
|
|
|
+ String token = jwtUtil.generateToken(user.getId());
|
|
|
log.info("老用户登录成功,userId: {}, token已生成", user.getId());
|
|
|
|
|
|
return WxLoginCheckVO.builder()
|
|
|
@@ -99,9 +104,11 @@ public class AuthServiceImpl implements AuthService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 第二步:手机号授权验证
|
|
|
- * @param dto 包含loginCode、phoneCode、encryptedData、iv
|
|
|
- * @return 已注册返回token,未注册返回用户信息
|
|
|
+ * 第二步(新用户):手机号授权验证
|
|
|
+ * 小程序调用 getPhoneNumber 获取加密手机号,发送到后端解密验证
|
|
|
+ *
|
|
|
+ * @param dto 包含 loginCode、encryptedData、iv
|
|
|
+ * @return 已注册用户返回 isSign=true + token,未注册返回 isSign=false + openid/unionid/phoneNumber
|
|
|
*/
|
|
|
@Override
|
|
|
public WxLoginCheckVO wxPhoneCheck(WxPhoneLoginDTO dto) {
|
|
|
@@ -167,7 +174,7 @@ public class AuthServiceImpl implements AuthService {
|
|
|
}
|
|
|
|
|
|
// 6. 生成token并返回
|
|
|
- String token = jwtUtil.generateToken(user.getId(), user.getPhone());
|
|
|
+ String token = jwtUtil.generateToken(user.getId());
|
|
|
log.info("已注册用户登录成功,userId: {}, token已生成", user.getId());
|
|
|
|
|
|
return WxLoginCheckVO.builder()
|
|
|
@@ -182,9 +189,11 @@ public class AuthServiceImpl implements AuthService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 第三步:完善用户信息(首次登录)
|
|
|
- * @param dto 包含完整用户信息
|
|
|
- * @return 返回token
|
|
|
+ * 第三步(新用户):完善用户信息并注册
|
|
|
+ * 小程序提交完整的用户信息(头像+昵称+手机号+openid等)完成注册
|
|
|
+ *
|
|
|
+ * @param dto 包含 openid、unionid、phoneNumber、nickname、avatarUrl
|
|
|
+ * @return 返回 token
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@@ -234,7 +243,7 @@ public class AuthServiceImpl implements AuthService {
|
|
|
log.info("用户积分初始化完成,userId: {}, 赠送初始积分: {}", newUser.getId(), INITIAL_POINTS);
|
|
|
|
|
|
// 5. 生成token
|
|
|
- String token = jwtUtil.generateToken(newUser.getId(), newUser.getPhone());
|
|
|
+ String token = jwtUtil.generateToken(newUser.getId());
|
|
|
|
|
|
// 6. 返回token
|
|
|
return LoginVO.builder()
|