API接口
需要权限:当前用户是要修改内容的对应用户
接口
/**
* 修改用户信息user-info
* <p>
* 允许用户修改的内容
* 1、头像
* 2、用户名 (唯一的)
* 2.5、签名
* 3、密码 (单独修改)
* 4、Email (唯一的,单独修改)
*
* @return
*/
@PutMapping("/{userId}")
public ResponseResult updateUserInfo(HttpServletRequest request,
HttpServletResponse response,
@PathVariable("userId") String userId, @RequestBody SobUser sobUser) {
return userService.updateUserInfo(request, response, userId, sobUser);
}
修改用户信息
/**
* 更新用户信息
*
* @param request
* @param response
* @param userId
* @param sobUser
* @return
*/
@Override
public ResponseResult updateUserInfo(HttpServletRequest request, HttpServletResponse response,
String userId, SobUser sobUser) {
//从token里解析出来的user,为了校验权限
//只有用户才可以修改自己的信息
SobUser userFromTokenKey = checkSobUser(request, response);
if (userFromTokenKey == null) {
return ResponseResult.ACCOUNT_NOT_LOGIN();
}
SobUser userFromDb = userDao.findOneById(userFromTokenKey.getId());
//判断当前用户的ID和即将要修改的用户ID是否一致,如果一致才可以修改
if (!userFromDb.getId().equals(userId)) {
return ResponseResult.PERMISSION_FORBID();
}
//可以进行修改
//可经修改的项
//用户名
String userName = sobUser.getUserName();
if (!TextUtils.isEmpty(userName)) {
SobUser userByUserName = userDao.findOneByUserName(userName);
if (userByUserName != null) {
return ResponseResult.FAILED("该用户已注册.");
}
userFromDb.setUserName(userName);
}
//头像
if (!TextUtils.isEmpty(sobUser.getAvatar())) {
userFromDb.setAvatar(sobUser.getAvatar());
}
//签名,可以为空
userFromDb.setSign(sobUser.getSign());
userDao.save(userFromDb);
//干掉redis里的token,下一次请求,需要解析token的,就会根据refreshToken重新创建一个。
String tokenKey = CookieUtils.getCookie(request, Constants.User.COOKIE_TOKE_KEY);
redisUtils.del(tokenKey);
return ResponseResult.SUCCESS("用户信息更新成功.");
}
这里应该没什么难点吧,同学们有什么问题的话,可以到问答模块发帖子。