✏️ 이 글은 사이드프로젝트 "스무디"를 개발하며 알게된 점은 정리하여 기록한 글입니다.
스무디에서는 로그인한 사용자의 정보를 가져와야 하는 경우가 있었는데, supabase에서 유저 정보를 가져오기 위한 방법을 찾아보니 getSession
과 getUser
두 가지 메서드가 있었다. 처음에는 getSession만 알고, getSession만 사용하다가 추후 getUser를 발견했는데 어디에 무엇을 사용해야 하는지, 어떤 점이 다른지 알고싶어 찾아본 내용을 정리하였다.
supabase에서 유저 정보를 가져오는 방법
💬 아래 getSession, getUser에 대한 설명은 공식문서의 번역본입니다.
1. getSession()
🔗 https://supabase.com/docs/reference/javascript/auth-getsession
getSession() 메서드는 세션을 반환하고 필요한 경우 세션을 새로 고칩니다.
- 이 방법은 현재 로컬 세션(로컬 저장소)을 가져옵니다.
- 세션에는 서명된 JWT와 인코딩되지 않은 세션 데이터가 포함되어 있습니다.
- 인코딩되지 않은 세션 데이터는 로컬 저장소에서 가져오기 때문에 서버에서 신뢰할 수 있는 데이터 소스로 의존해서는 안됩니다. 보낸 사람에 의해 조작될 수 있습니다. 검증된 신뢰할 수 있는 사용자 데이터가 필요한 경우 getUser를 사용하세요.
- 세션에 만료된 access token이 있는 경우, getSession은 새 세션을 가져오기 위해 refresh token을 사용합니다.
2. getUser()
🔗 https://supabase.com/docs/reference/javascript/auth-getuser
현재 세션이 존재하는 경우 현재 사용자 정보를 가져옵니다. getUser는 Supabase Auth 서버에 네트워크 요청을 수행하므로 반환된 값은 인증된 것이며, 이를 기반으로 권한 부여 규칙을 설정할 수 있습니다.
- getUser는 로컬 세션 대신 데이터베이스에서 사용자 객체를 가져옵니다.
- getUser는 사용자의 JWT(access token)를 서버에서 유효성을 검사하므로 사용자가 권한이 있는지 확인하는데 유용합니다.
- 서버에서 사용자 권한을 확인할 때 항상 사용해야 합니다. 클라이언트에서는 더 빠른 결과를 위해 getSession().session.user를 사용할 수 있습니다. getSession은 서버에서 사용하기에는 안전하지 않습니다.
그래서 언제, 무엇을 사용해야 할까?
getUser를 사용하여 사용자 정보를 가져오는 것이 더 신뢰할 수 있다. 그렇다면 둘 중 항상 getUser를 사용하면 되는 것 아닌가?
getSession은 클라이언트 측에서 빠른 응답이 필요한 경우, 반복적으로 사용자 정보를 조회해야 하는 경우, 비용 효율성을 높이고 사용자 경험을 개선하고자 할 때 유용하다. 그러나 보안이 중요한 경우나 서버 측에서 권한 검증이 필요한 경우에는 getUser를 사용하는 것이 더 적합하다.
1. getSession()
- 클라이언트 측 사용: 클라이언트에서는 getSession을 사용하면 응답 속도가 더 빠르다.
- 속도: getSession은 네트워크 요청을 하지 않기 때문에 빠른 결과를 제공하여 사용자 경험을 개선하는 데 도움이 된다.
- 비용 효율성: 빈번한 네트워크 요청을 피할 수 있어 API 호출 비용을 줄일 수 있다.
- 오프라인 사용: 애플리케이션이 오프라인 모드를 지원해야 하는 경우, getSession을 사용하면 네트워크 연결이 없을 때도 로컬 세션에서 사용자 정보를 가져올 수 있다.
2. getUser()
- 서버 측 사용: 서버에서 사용자 권한을 확인할 때는 getUser를 사용하는 것이 좋다. 이는 getUser가 Supabase Auth 서버에 네트워크 요청을 보내고 JWT(access token)를 검증하여 신뢰할 수 있는 인증 정보를 제공하기 때문이다.
- 정확성: getUser는 데이터베이스에서 사용자 정보를 가져오기 때문에 항상 최신의 인증된 정보를 제공한다.
- 보안: 서버 측에서 getUser를 사용하면 클라이언트의 조작 가능성을 최소화하고, 보안을 강화할 수 있다.
'Frontend Dev > Supabase' 카테고리의 다른 글
[supabase] supabase에서 관계 테이블 가져오기 (과정을 기록해보자!) (0) | 2024.07.18 |
---|---|
supabase auth와 나의 public 테이블 연동하기 (회원가입시 auth의 유저 정보를 public 테이블로 가져오는 방법) (1) | 2024.07.04 |