BJSNuruhee / levelup

0 stars 0 forks source link

[Springboot + Vue3] Cookie를 이용한 로그인 구현 #40

Closed yejun95 closed 10 months ago

yejun95 commented 10 months ago

Springboot + Vue3를 이용한 Cookie 설정

기본 흐름

✔ frontend 구조 구조

image



✔ backend 구조

image



✔ 클라이언트에서 서버로 id, pw 전송

export default function useAuth() { const store = useUserStore(); const { account } = storeToRefs(store); const error = ref(); const baseUrl = '/api' const userIdCheck = ref();

// 세션 로그인 const login = async (id, pw) => { await axios.post(${baseUrl}/post/user/login, { userId: id, userPw: pw }) .then(res => { account.value.id = res.data // 로그인 성공시 쿠키 아이디를 store에 저장 window.alert("로그인 하였습니다.") }).catch(err => { window.alert("로그인 실패입니다.") error.value = err console.log(error.value) }) } }


- store / user.js
```javascript
import { defineStore } from "pinia";
import { ref, computed } from "vue";

export const useUserStore = defineStore("user", () => {

  const account = ref({
    id: null
  })

  return { 
    account,

  };
});




✔ 서버에서 id, pw를 조회하여 검증

image

쿠키 구조 image

아래는 도메인이 다른 네이버의 예시이다.

image

httponly 속성을 적용하지 않으면 스크립트로 쿠키 탈취가 가능하다. image

image

image



✔ 새로고침으로 인한 세션 풀림

💡 쿠키를 이용한 로그인 과정에서의 회고

같은 아이디로 로그인 하였을 때, 쿠키 값이 항상 일정하다.

image

다른 브라우저에서 쿠키를 등록하면 내 도메인에서 로그인이 되는가?

해당 사이트에서 유효한 쿠키는 어떻게 확인할 것인가??

image

// HttpServletRequest

/**
 * Returns an array containing all of the <code>Cookie</code> objects the client sent with this request. This method
 * returns <code>null</code> if no cookies were sent.
 *
 * @return an array of all the <code>Cookies</code> included with this request, or <code>null</code> if the request
 *             has no cookies
 */
Cookie[] getCookies();


✔ 쿠키 인증 과정

image