arte-ri-um / arterium

전시회 정보 공유 플랫폼
1 stars 0 forks source link

[JWT] 토큰 못 받아오는 오류 #20

Open chaerimyoo1234 opened 1 year ago

chaerimyoo1234 commented 1 year ago

오류 내용

회원가입 후 토큰을 못 받아와 로그인이 안 됨.

오류 원인

tokenprovider에서 key 값을 인코딩만 하고 디코딩 해주지 않음.

오류 해결

기존

 public TokenProvider(@Value("${jwt.secret}") String secret,
                         @Value("${jwt.token-validity-in-seconds}") long tokenValidityInSeconds,
                         UserRepository userRepository) {

        // Base64로 인코딩한 secret 값 사용
        this.secret = Base64.getEncoder().encodeToString(secret.getBytes());
        this.tokenValidityInMilliseconds = tokenValidityInSeconds * 1000;
        this.userRepository = userRepository;
    }

수정

public TokenProvider(@Value("${jwt.secret}") String secret,
                         @Value("${jwt.token-validity-in-seconds}") long tokenValidityInSeconds,
                         UserRepository userRepository) {

        // Base64로 인코딩한 secret 값 사용
        this.secret = Base64.getEncoder().encodeToString(secret.getBytes());
        this.tokenValidityInMilliseconds = tokenValidityInSeconds * 1000;
        this.userRepository = userRepository;
    }

    // 토큰 생성 및 검증 시에는 디코딩한 비밀키 사용 >> 이 내용을 추가
   @PostConstruct
    public void init() {
        // secret 값을 Base64로 디코딩하여 키 생성
        byte[] keyBytes = Base64.getDecoder().decode(secret);
        this.key = Keys.secretKeyFor(SignatureAlgorithm.HS512);
    }