🍣
Re:ゼロから始めるSpring Boot実践#1 WebBlog開発#8 パスワード変更
機能一覧※再掲
- ユーザ
1.1 新規登録
1.2 ログイン
1.3 ユーザ情報取得
1.4 ユーザ情報更新
1.5 アバター画像変更
1.6 パスワード変更 ← 本記事の内容 - 記事カテゴリ
略 - 記事管理
略
API設計
1.5.1 APIの基本情報
- リクエストパス:/updatePassword
- リクエスト方式:PATCH
1.5.2 リクエストパラメータ
- リクエストパラメータ形式:json
- リクエストデータ例:
{
"old_password":"123456",
"new_password":"123456",
"re_password":"234567"
}
1.5.3 レスポンスデータ
- レスポンスデータ形式:application/json
- レスポンスパラメータの説明:
{
"code": 0,
"message": "操作完了",
"data": null
}
API開発
1. 開発するメソッド・クラスを考える
1.1 ユーザ情報更新
略
2. Controller作成
UserControllerクラスに以下のメソッドを追加
@PatchMapping("/updatePassword")
public Result updatePassword(@RequestBody Map<String,String> params){
// パラメータのバリデーション
String oldPassword = params.get("old_password");
String newPassword = params.get("new_password");
String rePassword = params.get("re_password");
if(!StringUtils.hasLength(oldPassword) || !StringUtils.hasLength(newPassword) || !StringUtils.hasLength(rePassword)) {
return Result.error("入力データは不足しています。");
}
Map<String, Object> map = ThreadLocalUtil.get();
String username = (String) map.get("username");
User loginUser = userService.findByUserName(username);
if(!loginUser.getPassword().equals(Md5Util.getMD5String(oldPassword))){
return Result.error("入力された現在のパスワードは正しくありません。");
}
if(!newPassword.equals(rePassword)){
return Result.error("2回入力された新しいパスワードは異なります。");
}
userService.updatePassword(newPassword);
return Result.success();
}
4. SeriveとMapperの作成
- UserServiceImplクラスに以下のメソッドを追加
@Override
public void updatePassword(String password) {
Map<String, Object> map = ThreadLocalUtil.get();
Integer id = (Integer) map.get("id");
userMapper.updatePassword(Md5Util.getMD5String(password),id);
}
- UserMapperクラスに以下のメソッドを追加
// パスワード変更
@Update("update rezerosb_weblog.user set password=#{password}, update_time=now() where id=#{id}")
void updatePassword(String password, Integer id);
APIテスト
PostmanでAPIを実行してみた。
Discussion