Skip to content

Commit

Permalink
feat: 비밀번호 재설정
Browse files Browse the repository at this point in the history
  • Loading branch information
GimHaLim committed Jun 14, 2024
1 parent 31ab8cc commit 26e8190
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 0 deletions.
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ dependencies {

//chat
implementation 'org.springframework.boot:spring-boot-starter-websocket'

// reset password
implementation 'org.springframework.boot:spring-boot-starter-mail'
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,16 @@
import com.soongsil.poppin.user.application.response.UserDto;
import com.soongsil.poppin.user.domain.Member;
import com.soongsil.poppin.user.domain.UserRepository;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -23,6 +27,7 @@
import org.springframework.web.util.UriComponentsBuilder;
import java.util.LinkedHashMap;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;


@Service
Expand Down Expand Up @@ -98,6 +103,35 @@ public Long chargePoint(ChargePointDto chargePointDto) {
return newPoint;
}

public void modifyPassword(String userId) {
Long userIdAsLong = Long.parseLong(userId);

CompletableFuture.runAsync(() -> {
try{
sendEmailForCertification(userIdAsLong);
} catch (Exception e) {
e.printStackTrace();
}
});
}

public void setPassword(String email) {
email = email.replace("%40", "@");
Member member = userRepository.getWithEmail(email + "om");

log.info("아이디!!!" + member);
if (member == null) {
throw new UserException(ErrorCode.USER_NOT_FOUND);
}
CompletableFuture.runAsync(() -> {
try{
sendEmailForCertification(member.getUserId());
} catch (Exception e) {
e.printStackTrace();
}
});
}


public UserDto getKakaoMember(String accessToken) {
// accessToken을 이용해서 사용자 정보(닉네임) 가져오기
Expand Down Expand Up @@ -163,4 +197,48 @@ private String makeTempPassword() {
}
return buffer.toString();
}

//이메일 보내기
public void sendEmailForCertification(Long userId) throws MessagingException {

// 비밀번호 생성
String certificationNumber = makeTempPassword();

String img = "<img src='http://localhost:8080/plick_logo.png' alt='Plick Logo'>";
String link = "<a href='http://localhost:3000/Login'>로그인 링크</a>";

String content = String.format("%s <br> 임시비밀번호: %s <br><br> %s <br> 로그인 후 마이페이지에서 비밀번호를 수정해주세요.",
img,
certificationNumber,
link);

// 비밀번호 인코딩
String userPw = passwordEncoder.encode(certificationNumber);

// DB에 비밀번호 저장
Optional<Member> result = userRepository.findById(userId);
Member member = result.orElseThrow(() -> new UserException(ErrorCode.USER_NOT_FOUND));
member.setPassword(userPw);
userRepository.save(member);

// 이메일 전송
sendMail(member.getEmail(), content);
}


private final JavaMailSender mailSender;
private void sendMail(String email, String content) throws MessagingException {

// 이메일 객체 생성
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);

// 수신자, 제목, 내용 설정
helper.setTo(email);
helper.setSubject("Pop`in 비밀번호 변경 메일");
helper.setText(content, true); // html변환 전달

// 메일 전송
mailSender.send(mimeMessage);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.soongsil.poppin.user.presentation;

import com.soongsil.poppin.global.response.ResponseDto;
import com.soongsil.poppin.user.application.MemberService;
import com.soongsil.poppin.user.application.response.ChargePointDto;
import com.soongsil.poppin.user.application.response.JWTUtil;
import com.soongsil.poppin.user.application.response.MypageDto;
import com.soongsil.poppin.user.application.response.UserDto;
import com.soongsil.poppin.user.domain.Member;
import com.soongsil.poppin.userchat.application.response.JoinUserChat;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpStatus;
Expand Down Expand Up @@ -51,4 +53,28 @@ public ResponseEntity<Long> chargePoint(@RequestBody ChargePointDto chargePointD
return ResponseEntity.ok(newPoint);
}

@PostMapping("/v1/user/modify-password")
public ResponseEntity<String> modifyPassword(@RequestBody String userId) {
try {
memberService.modifyPassword(userId);
return ResponseEntity.ok("비밀번호가 성공적으로 변경되었습니다.");
} catch (Exception e) {
// 예외 발생 시 적절한 에러 응답 반환
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("비밀번호 변경 중 오류가 발생했습니다.");
}
}

@PostMapping("/v1/user/set-password")
public ResponseEntity<String> setPassword(@RequestBody String email) {
try {
memberService.setPassword(email);
return ResponseEntity.ok("비밀번호가 성공적으로 변경되었습니다.");
} catch (Exception e) {
// 예외 발생 시 적절한 에러 응답 반환
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("비밀번호 변경 중 오류가 발생했습니다.");
}
}

}
10 changes: 10 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,13 @@ logging.level.org.hibernate.orm.jdbc.bind=TRACE

# Server port
server.port=8080

## reset password setting
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.properties.mail.debug=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.timeout=50000
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.username=[email protected]
spring.mail.password=xldrdfmoiyvalokr
Binary file added src/main/resources/static/plick_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 26e8190

Please sign in to comment.