간단 설명
수파베이스 구글 로그인/회원가입시 테이블에 데이터 추가
상세 설명
Supabase에서 auth.users
와 사용자 정의 테이블인 Profile
은 서로 다른 역할을 수행합니다.
auth.users
테이블- 역할: Supabase Auth가 자동으로 관리하는 테이블로, 기본적인 인증 정보를 저장합니다.
- 내용: 사용자 ID, 이메일, 생성 날짜, 업데이트 날짜와 같은 인증 정보가 포함됩니다.
- 사용 목적: 사용자 로그인 및 인증 관련 작업을 위한 시스템 테이블입니다.
- 수정 제한: Supabase가 관리하므로 직접 수정하거나 필드를 변경하지 않는 것이 좋습니다.
Profile
테이블- 역할: 애플리케이션에서 필요한 추가적인 사용자 정보를 저장하기 위한 테이블입니다.
- 내용: 사용자 이름, 프로필 사진, 소개 등 앱에서 활용되는 확장된 프로필 정보가 포함됩니다.
- 사용 목적: 사용자 프로필 표시, 커스터마이징된 정보 저장, RLS 규칙 설정 등에 활용됩니다.
- 수정 가능: 개발자가 필드를 자유롭게 수정하거나 추가할 수 있습니다.
auth.users
와 Profile
의 구분 이유
- 인증과 사용자 데이터의 분리:
auth.users
는 기본적인 인증 정보만을 관리하고,Profile
은 앱에서 요구하는 추가 정보를 관리합니다. - 확장성과 제어 용이성:
auth.users
는 Supabase에서 관리하여 제한이 있는 반면,Profile
은 개발자가 제어할 수 있어 다양한 RLS 규칙을 적용하거나 데이터를 커스터마이징하기 좋습니다.
결론적으로, auth.users
로 인증을 처리하고 Profile
테이블로 사용자 정보를 관리하는 것이 일반적인 접근 방식입니다.
테이블 예
CREATE TABLE "Profile" (
"id" UUID PRIMARY KEY REFERENCES auth.users (id) ON DELETE CASCADE, -- auth.users 의 id 와 동일
"email" VARCHAR(255) UNIQUE NOT NULL,
"name" VARCHAR(255) DEFAULT '',
"avatarUrl" VARCHAR(255) DEFAULT '',
"date" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
"grade" VARCHAR(255) DEFAULT 'free' -- free (1), basic (10), premium (25), vip (40)
);
트리거 예
--[Next, Supabase Auth] 이메일, 소셜 로그인 기능 구현 및 트리거 설정
--https://mingos-habitat.tistory.com/108
--Your trigger function must be security definer type as shown in the User Management starter template in the SQL editor, or in most of the starter guides.
--https://github.com/supabase/supabase/issues/17186
--[supabase] trigger/function 조건부로 작성하기
--https://velog.io/@_soul_/supabase-triggerfunction-%EC%A1%B0%EA%B1%B4%EB%B6%80%EB%A1%9C-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0
--User Management | Supabase Docs
--https://supabase.com/docs/guides/auth/managing-user-data
--DROP TRIGGER IF EXISTS "on_auth_user_created" ON auth.users;
--DROP FUNCTION insert_profile;
CREATE OR REPLACE FUNCTION insert_profile()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.raw_app_meta_data ->> 'provider' = 'google' THEN
INSERT INTO
public."Profile" ("id", "email", "name", "avatarUrl", "grade")
VALUES
(
NEW.id,
NEW.email,
NEW.raw_user_meta_data ->> 'name',
NEW.raw_user_meta_data ->> 'avatar_url',
'free'
);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql security definer;
CREATE TRIGGER "on_auth_user_created"
AFTER INSERT ON auth.users
FOR EACH ROW
EXECUTE FUNCTION insert_profile();
정책 예
select: 로그인 사용자
--Profile
create policy "Enable select for users based on userId"
on "public"."Profile"
for select
using (
(select auth.uid()) = "id"
);
create policy "Enable update for users based on userId"
on "public"."Profile"
for update
using (
(select auth.uid()) = "id"
);
--정책 추가 않된 경우 디폴트 Enable read access for authenticated
ALTER TABLE "Profile"
ENABLE ROW LEVEL SECURITY;
수파베이스 구글 로그인 설정
https://automatethem.tistory.com/293
Sns
https://automatethem.tistory.com/366
https://blog.naver.com/automatethem/223654729981
https://automate-them.blogspot.com/2024/11/blog-post_92.html
관리
https://github.com/automatethem-prod-web/navbar-menu-sidepanel-login-web-app
https://github.com/automatethem-prod-web/navbar-menu-sidepanel-login-user-dropdown-web-app
반응형
'웹 도구 제작 노트' 카테고리의 다른 글
페이팔 일반/구독 결제 - 사이트에 결제 달기 (0) | 2024.11.21 |
---|---|
Promise 객체 사용 예 (0) | 2024.11.20 |
토스페이먼츠 일반/구독 결제 - 사이트에 결제 달기 (0) | 2024.11.15 |
수파베이스 로 레벨 보안 설정 (0) | 2024.10.25 |
수파베이스 구글 로그인 설정 (0) | 2024.10.23 |