-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature/inyeob step1 #12
base: inyeob
Are you sure you want to change the base?
Conversation
SQLite DB 를 추가하였음. DB Config 생성하였고, sqlite properties를 생성하여서 둘 config 파일이 이를 따르게 하였다.
도메인 패키지와 엔티티 패키지 생성 created, modified 를 공통적으로 사용할 수 있게 BaseTimeEntity 생성 유저 엔티티 생성
spring security 를 이용해서 회원 가입을 구현하였다. 회원 가입을 하기 위해서 username(아이디), password, name이 필요하다.
org.xerial:sqlite-jdbc의 버전을 3.7.2에서 3.40.1로 업그레이드
String header = request.getHeader("Authorization"); | ||
if (header != null && header.startsWith("Bearer ")) { | ||
try { | ||
String accessToken = header.substring(7); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
꿀팁) "Bearer ".length
해도 됨
reissueLimit = refreshExpirationHours * 60 / expirationMinutes; | ||
} | ||
public String createAccessToken(String userSpec){ | ||
Algorithm algorithm = Algorithm.HMAC256("gdscys2023"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이런 string constant 도 따로 빼두던가 properties 에 두는 것도 좋을 듯! 각각에 하드코딩 되어 있으면 바뀔 때 놓치기 쉬워서
Algorithm algorithm = Algorithm.HMAC256("gdscys2023"); | ||
|
||
return JWT.create() | ||
// TODO: 만료 기한 정하기 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
만료기한 정해주세요 ㅋㅋㅋㅋㅋㅋ
@@ -0,0 +1,4 @@ | |||
package com.inshining.poke.domain.dto; | |||
|
|||
public record SignInRequest(String username, String password) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
record 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
public static User from(SignUpRequest request, PasswordEncoder encoder){ | ||
return User.builder() | ||
.username(request.username()) | ||
.password(encoder.encode(request.password())) | ||
.name(request.name()) | ||
.build(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굳이 spring bean 을 인자로 주입 받으면서 static 한 메소드로 User 엔티티를 만들 필요는 없는 듯! 엔티티의 책임을 벗어나는 일 같은데 SignUpRequest 로 부터 사용자의 입력값을 추출하고 그를 바탕으로 User 엔티티를 만드는 일은 Service 의 역할인 것 같습니다.
try { | ||
userRepository.flush(); | ||
} catch (DataIntegrityViolationException | ConstraintViolationException e) { | ||
throw new IllegalArgumentException("이미 사용 중인 아이디입니다."); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
flush 를 해보고 try catch 를 하는 것보단 existsByUsername
같은 repository 메소드를 정의해서 확인하는게 더 낫지 않을까요?
public SignInResponse signIn(@RequestBody SignInRequest request) { | ||
return service.signIn(request); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
큰 상관은 없지만 보통 쿠키 말고 헤더를 사용하는 access token 을 내려줄 때 body 로 내려주기 보단 X-SET-ACCESS-TOKEN
같은 헤더값으로 내려주긴 합니다. 이유는 여러가지가 있지만 클라에서 body 읽기보다 헤더 읽기가 더 간단해서, body 로 내려주면 로그 찍으면 바로 보여서, 그냥 그래와서.. 등등등 이 있습니다
이후 하드코딩을 막기 위해 jwt 설정을 properties로 옮겼음
기존 유저 존재 여부 확인 후에 생성 로직으로 변경
Step1 구현
왜 JWT를 선택했는지?
왜 SQLite 선택했는지?