목차
DB에 user 정보가 기록되지 않던 문제 해결 과정
로그인 과정 수정
로그아웃
결과
DB에 user 정보가 기록되지 않던 문제 해결 과정
문제 해결을 위한 시도
- Test를 추가한 결과 DB에 User 정보 저장 실패
func TestGetUserInfo_and_Save(t *testing.T) {
setupTestDB()
defer teardownTestDB()
err := godotenv.Load("./../.env")
if err != nil {
fmt.Println("env 오류")
}
TEMP_TOKEN := os.Getenv("TEMP_TOKEN")
user, err := GetUserInfo(TEMP_TOKEN)
isSavedID, err := IsSavedID(user, testDB)
if err != nil {
return
}
if !isSavedID {
err := C_UserInfo(user, testDB)
if err != nil {
t.Fatal("생성 실패")
}
}
}
판단
GetUserInfo에서 받은 user의 값에 문제가 있다.
결과
원인 : user의 id 값이 DB int의 범위를 초과하여 저장에 문제가 발생
해결 : id의 type을 varchar를 이용
로그인 과정 수정
로그아웃을 구현하기 위해서 로그인 먼저 개선이 필요하다고 판단하여 로그인을 고민하였습니다.
Flow chart
기존의 문제점
Cookie에 사용자의 정보를 담고있어 Cookie를 수정할 수 있음
선택한 방법
Session을 활용하여 user의 정보를 저장하여 Cookie를 수정하게 되는 경우 Session의 값과 비교하여 이상 탐지
Session의 ID는 어떻게 정하는가?
참고한 사이트
https://velog.io/@tataki26/GO-Session-%EC%83%9D%EC%84%B1
위의 사이트에서 Cookie와 Session의 차이점과 로그인 로그아웃에 대한 예제를 확인
UUID
Univerally Unique Identifier의 약자로 범용 고유 식별자를 의미
golang에서 github.com/google/uuid
, github.com/satori/go.uuid
등을 활용하여 UUID를 생성
ULID
UUID에 대하여 알아보던 중 ULID에 대하여 알게되었습니다.
Universally Unique Lexicographically Sortable Identifier의 약자로 생성 순서대로 정렬이 가능한 특징이 있습니다.
두 방법을 확인 후 golang을 활용한 session 생성 방법을 확인한 결과 gorila/session을 활용하여 cookie까지 생성하는 방법을 알게 되어 gorila/session을 사용하기로 결정
Session 저장 오류
문제점
session에 user정보를 저장하고 axios를 통하여 정보를 호출하려고 하였지만 session에 저장된 정보가 없어 오류가 발생
원인
axios로 요청 시 cookie를 담아 보내지 않아 session에서 값을 확인할 수 없던 문제
해결
withCredentials의 값을 true로 하여 cookie 전달
const result = await axios.get("http://localhost:8080/userinfo", {
withCredentials: true,
});
로그아웃
cookie 정보를 전달하여 session을 초기화
await axios.get("http://localhost:8080/kakao/logout", {
withCredentials: true,
});
응답이 오면 root URL로 이동하여 카카오 로그인 하지 않으면 서비스를 이용하지 못하게 막음
결과
'개발일기 > Prism' 카테고리의 다른 글
[개발일기] DB 피드백과 그에 대한 생각 (0) | 2023.12.13 |
---|---|
[개발일기] Backend 리팩토링 (Session, DB, 경로 관리) (2) | 2023.12.11 |
[개발일기] 프로필 페이지 1차 기록 (문제점과 추가 작업) (0) | 2023.12.07 |
[개발일기] 카카오 로그인 구현 - Token 발급 (React with Golang) (2) | 2023.12.02 |
[개발일기] Header 구현 (React - Typescript) (0) | 2023.12.01 |