본문 바로가기

공부/트러블 슈팅

[트러블 슈팅] supabase에서 Google, Kakao 로그인 시 신규 사용자 저장 오류

반응형

 

소셜 로그인을 구현하는 과정에서 발생한 트러블 슈팅에 대해 정리해 보려고 합니다.

http://auth/auth-code-error#error=server_error&error_code=500&error_description=Database+error+saving+new+user

발생한 오류 🔥

Google과 Kakao로 로그인을 시도할 때 신규 사용자를 데이터베이스에 저장하는 과정에서 다음과 같은 오류가 발생했습니다.

 

해결 과정 🔎

기존 트리거 함수는 다음과 같습니다.

create function public.add_new_user()
returns trigger as $$
begin
if new.raw_app_meta_data ->> 'provider' = 'email' then
insert into
  public.profiles (id, email, user_name, avarta_url)
values
  (
    new.id,
    new.email,
    new.raw_user_meta_data ->> 'user_name',
    new.raw_user_meta_data ->> 'avarta_url'
  );

elsif new.raw_app_meta_data ->> 'provider' = 'kakao' then
insert into
  public.profiles (id, email, user_name, avatar_url)
values
  (
    new.id,
    new.email,
    new.raw_user_meta_data ->> 'name',
    new.raw_user_meta_data ->> 'avatar_url'
  );

elsif new.raw_app_meta_data ->> 'provider' = 'google' then
insert into
  public.profiles (id, email, user_name, avatar_url)
values
  (
    new.id,
    new.email,
    new.raw_user_meta_data ->> 'name',
    new.raw_user_meta_data ->> 'avatar_url'
  );
  
end if;

return new;

end;

$$ language plpgsql security definer;

 

이 트리거는 사용자의 로그인 provider에 따라 유저 정보를 `public.profiles`테이블에 저장하는 역할을 하는데 해당 쿼리문에 문제가 발생해 신규 유저가 등록되지 않는 문제가 발생했습니다.

 

해결 방법 ✨

문제를 추적해 보니, `email` provider에서 잘못된 속성 `avarta_url`을 사용하고 있었고, `avatar_url`로 수정한 후 코드가 정상 작동하게 되었습니다.

if new.raw_app_meta_data ->> 'provider' = 'email' then
insert into
  public.profiles (id, email, user_name, avatar_url) -- 수정된 부분
values
  (
    new.id,
    new.email,
    new.raw_user_meta_data ->> 'user_name',
    new.raw_user_meta_data ->> 'avatar_url' -- 수정된 부분
  );

 

느낀 점 ❕

작은 오타 하나가 시스템의 작동을 방해할 수 있다는 점... 앞으로 더욱 데이터 구조와 속성을 면밀히 검토하는 것이 필요하다 생각했습니다.

 

반응형