관리 메뉴

bright jazz music

blog 30 : 고정인증 로그인 기능 구현 2 본문

Projects/blog

blog 30 : 고정인증 로그인 기능 구현 2

bright jazz music 2023. 2. 14. 22:05

현재 DB에 값이 들어가 있지 않아 테스트가 번거롭다. 따라서 스프링을 실행할 때 sql파일을 추가하여 자동으로 값을 밀어 넣는 방법을 사용한다.

 

1. data.sql 파일 생성

data.sql 파일을 생성하여 resource 폴더 아래에 위치시킨다. 그 다음 application.yml 또는 application.properties 파일의 jpa설정을 수정한다.

 

User엔티티 파일에 맞춰 sql 파일을 생성한다.

-- data.sql --
INSERT INTO `users` (name, email, password, created_at) values ('catnails', 'catnails@gmail.com', '1234', '2023-02-14 21:58:00');

'가 아니라 `이다. 정 껄끄러우면 안 붙여도 들어간다.

 

2. application.yml 수정

#application.yml
spring:
  h2:
    console:
      enabled: true
      path: /h2-console

#0이 아닌 1부터 시작하는 걸로 하겠다는 의미
  data:
    web:
      pageable:
        one-indexed-parameters: true
        default-page-size: 20
        max-page-size: 2000

# 추가
  sql:
    init-model:always 


  #jpa설정
  jpa:
    defer-datasource-initialization: true


  datasource:
    url: jdbc:h2:mem:blog
    username: sa
    password:
    driver-class-name: org.h2.Driver

 

 

서버기동

 

값이 들어가 있는 것을 확인할 수 있다.

 

3. UserRepository 수정

//UserRepository.java

package com.endofma.blog.repository;

import com.endofma.blog.domain.User;
import org.springframework.data.repository.CrudRepository;

import java.util.Optional;

public interface UserRepository extends CrudRepository<User, Long> {
    Optional<User> findByEmailAndPassword(String email, String password);

}

 

4. AuthController 수정

//AuthController.java

package com.endofma.blog.controller;

import com.endofma.blog.domain.User;
import com.endofma.blog.exception.InvalidRequest;
import com.endofma.blog.exception.InvalidSigninInformation;
import com.endofma.blog.repository.UserRepository;
import com.endofma.blog.request.Login;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;


@Slf4j
@RestController
@RequiredArgsConstructor
public class AuthController {

    //생성자를 통한 주입
    private final UserRepository userRepository;

    @PostMapping("/auth/login")
    public User login(@RequestBody Login login){

        //json ID/PW
        log.info(">>> login = {}", login.toString());

        //DB에서 조회
        User user = userRepository.findByEmailAndPassword(login.getEmail(), login.getPassword())
                .orElseThrow(InvalidSigninInformation::new);

        //토큰을 응답

        return user;


    }
}

 

성공시 User객체 반환 실패 시 에러 반환

 

재기동 후 auth.http로 요청 테스트

 

 

요청 값이 DB에 존재했을 경우

 

틀린 email 또는 password를 입력했을 경우 위와 같이 에러를 발생시킨다.

 

Comments