TIL_230420

2023. 4. 21. 02:03TIL_WIL

어제 이야기를 나눴던 부분인데 나는 아래의 블로그를 참고해 소셜 로그인을 구현하고 로컬에서 email이 저장되는 것을 확인했다. 그런데 프론트엔드에서는 back end와 직접적 통신을 안하는데 어떻게 정보를 가져가냐고 해당 로직이 잘못됐다고 한다.
이 블로그에서 소셜 로그인 버튼이 back end와 연결해주는 부분이라고 생각했는데
해당 내용을 읽었는데 뭐가 잘 못 돼서 그렇게 말하는건지 이 블로그를 제대로 안 읽었는지 모르겠다.

프론트 설명은 한 페이지 반이 되는 내용이다

https://deeplify.dev/back-end/spring/oauth2-social-login#%EC%86%8C%EC%85%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EB%B2%84%ED%8A%BC

 

[Spring Boot] OAuth2 소셜 로그인 가이드 (구글, 페이스북, 네이버, 카카오)

스프링부트를 이용하여 구글, 페이스북, 네이버, 카카오 OAuth2 로그인 구현하는 방법에 대해서 소개합니다.

deeplify.dev

http://localhost:8080/oauth2/authorization/{provider-id}?redirect_uri=http://localhost:3000/oauth/redirect

위와 같은 url이 설정된 소셜로그인 버튼을 누른 후 서비스 제공자 별로 백엔드에 요청


redirect_uri는 인증이 완료된 후, 백엔드 API에 접근할 수 있는 Access Token을 쿼리스트링으로 받을 수 있는 프론트엔드 페이지

<template lang="pug">
</template>

<script>
import { mapMutations, mapActions } from 'vuex'

export default {
  created () {
    // 컴포넌트 렌더링이 되었을 때,

    // 쿼리스트링으로부터 토큰을 획득
    const token = this.$route.query.token
    console.log('token', token)

    // 토큰이 존재하는 경우, Vuex Store에 토큰을 저장한다.
    if (token) {
      this.setToken(token)
      this.fetchUser()
    }

    // 토큰이 있던 없던, 루트 페이지로 이동한다.
    this.$router.replace('/')
  },
  methods: {
    ...mapActions(['fetchUser']),
    ...mapMutations(['setToken'])
  }
}
</script>
# 백엔드 --Redirect--> 프론트엔드
http://localhost:3000/oauth/redirect?token={jwt-token}

소셜 로그인 요청에 파라미터로 같이 넣어주었던 redirect_uri에 쿼리스트링을 추가해 백엔드에서 프론트엔드로 토큰을 전달해준다.(나는 해당 내용을 header Authorization에 token을 넣어주는 로직으로 변경했다.)

프론트엔드에서 받은 토큰을 저장한 후, 백엔드 API 요청 시 헤더에 토큰을 추가하여 API를 사용할 수 있습니다.

로그인 후 FE에서 처리할 데이터가 없는 것 같은데 내가 잘 몰라서 그러는 걸까 아직 헷갈린다

나는 그런 로직을 안 쓰고 성공했기에 더 이해가 안 된다 프론트 로직에 대해서도 더 공부하고 싶은데 프론트 블로그에 첨부된 프론트의 git hub를 읽어도 알 수가 없으니 좀 답답하다 백엔드 실력을 늘리면서 프론트도 공부해야겠다.

'TIL_WIL' 카테고리의 다른 글

TIL_230419  (0) 2023.04.20
TIL_230418  (0) 2023.04.19
TIL_230415  (0) 2023.04.16
TIL_230414  (0) 2023.04.15
TIL_230413  (0) 2023.04.14