[스프링부트와 AWS로 혼자 구현하는 웹 서비스] 구글 로그인 연동하기-테스트

세이라·2023년 7월 28일
0

스터디를 통해 스프링부트와 AWS로 혼자 구현하는 웹 서비스(저자 이동욱) 서적을 공부하는 중입니다.

공부/실습한 내용을 정리한 포스팅입니다.
책에 모르는 부분이 있으면 구글링하거나 챗gpt에 물어봐서 보충하였습니다.
(아직 초보라 모르는 부분이 많아 이것저것 다 적었습니다.)

참고한 사이트 출처는 포스팅 맨 하단에 적었습니다.

구글 로그인 테스트

1. index.mustache 코드 추가 작성

로그인 버튼과 로그인 성공 시 사용자 이름 보여주는 코드

{{>layout/header}}
<h1>스프링 부트로 시작하는 웹 서비스 Ver.2</h1>
<div class="col-md-12">
<!--    로그인 기능 영역-->
    <div class="row">
        <div class="col-md-6">
            <a href="/posts/save" role="button" class="btn btn-primary">글 등록</a>
        {{#userName}}
           Logged in as : <span id="user">{{userName}}</span>
            <a href="/logout" class="btn btn-info active" role="button">Logout</a>
        {{/userName}}
        {{^userName}}
            <a href="/oauth2/authorization/google" class="btn btn-success active" role="button">Google Login</a>
        {{/userName}}
        </div>
    </div>
    <br>
<!--    목록 출력 영역-->
  .
  .
  .
  • {{#userName}}
    : 다른 언어와 같은 if문 제공. true/false 여부 판단할 뿐.
    그래도 Mustache에서 항상 최종값을 넘겨야 함.
    userName이 있다면 userName 노출시킴.
  • a href="/logout
    : Spring Security에서 기본적으로 제공하는 로그아웃 URI
    개발자가 별도로 저 URL에 해당하는 컨트롤러 만들 필요X
    SecurityConfig 클래스에서 URL 변경가능.
  • {{^userName}}
    : 해당 값이 존재하지 않는 경우에는 ^를 사용.
    userName이 없으면 로그인 버튼 노출시킴
  • a href="/oauth2/authorization/google"
    : Spring Security에서 기본적으로 제공하는 로그인 URL
    로그인URL과 마찬가지로 별도의 컨트롤러 생성할 필요X

2. IndexController 코드 추가

index.mustache에서 userName을 사용할 수 있게 IndexController에서 userName을 model에 저장하는 코드 추가

import javax.servlet.http.HttpSession;

@RequiredArgsConstructor
@Controller
public class IndexController {
    private final PostsService postsService;
    private final HttpSession httpSession;

    @GetMapping("/")
    public String index(Model model) {
        model.addAttribute("posts", postsService.findAllDesc());
        SessionUser user = (SessionUser) httpSession.getAttribute("user");
        
        if(user!=null){
            model.addAttribute("userName", user.getName());
        }
        
        return "index";
    }
    .
    .
    .
  • (SessionUser) httpSession.getAttribute("user")
    : CustomOAuthUserService에서 로그인 성공 시, 세션에 SessionUser 저장하도록 구성하여 그 값을 가져올 수 있었음.

3. 실행




로그인이 잘 된 것을 확인 가능.


4. 실제 글 등록 기능 사용

  • 현재 로그인된 사용자의 권한이 GUEST이므로 posts 기능 사용 불가능
  • h2-console에서 role을 USER로 변경
  • 세션에는 이미 GUEST로 저장되어 있어서 로그아웃 후 다시 로그인해서 세션 정보 최신정보로 갱신. 그리고 다시 글 등록.

0개의 댓글