본문 바로가기

Flutter-플러터/플러터 공부

Flutter X Supabase RLS , 서버에 유저 정보 저장하기

반응형

 

목표는 로그인 후 테이블에 유저를 특정 할 수 있는 uuid 값과 구글 이메일, 닉네임을 저장 하는 것이었습니다. 

 

 

Supabase에는 기본적인 보안 정책이 있습니다. 로그인 된 유저만 해당 DB 테이블을 CRUD를 할 수 있습니다. 

 

그것을 Row-Level Security 라고 부르고 줄여서 RLS 입니다. 

 

 

RLS 링크

https://supabase.com/docs/learn/auth-deep-dive/auth-row-level-security

 

Part Two: Row Level Security | Supabase Docs

_10 const { data, error } = await supabase.from('leaderboard').insert({ name: 'Bob', score: 99999 })

supabase.com

 

테이블을 RLS 설정을 키면 정책을 입력을 해야 합니다. 

Supabase는 기본적인 정책을 만들어 두었습니다. 

 

저는 유저의 uid 값을 RLS 정책 기본 값으로 설정했습니다. 이후에는 이 uid 값이 해당 테이블의 uid값과 일치해야 

글을 입력, 수정,삭제 할 수 있습니다. 

 

 

 

 

플러터에서는 다음과 같은 코드를 사용하였습니다. 

Future<AuthResponse> _googleSignIn2() async {
    // 구글 클라우드 웹 클라이언트 아이디
    const webClientId =
        '';

//구글 클라우드 IOS 클라이언트 아이디
    const iosClientId =
        '';

// 구글 로그인 요청
    final GoogleSignIn googleSignIn = GoogleSignIn(
      clientId: iosClientId,
      serverClientId: webClientId,
    );
    
    // 로그인 한 유저의 정보를 구글 인증 서버에 토큰 요청, 받은 토큰으로 supabae 서버에 로그인 시작

    final googleUser = await googleSignIn.signIn();
    final googleAuth = await googleUser!.authentication;
    final accessToken = googleAuth.accessToken;
    final idToken = googleAuth.idToken;
    // Google 로그인을 사용하여 Supabase에 로그인 시도
    final authResponse = await supabase.auth.signInWithIdToken(
      provider: Provider.google,
      idToken: idToken!,
      accessToken: accessToken,
    );


    // Supabase에서 자동으로 생성된 uid 가져오기
    final uid = authResponse.user?.id;
//로그인 후 todo 테이블에 supabaes에서 생성된 유저의 uid값과 구글 로그인을 통해 얻은 닉네임, 이메일을 저장
    await supabase.from('todo').insert([
      {
        'Uid': uid,
        'Name': googleUser.displayName ?? '',
        'Email': googleUser.email,

     
      }
    ]);

    return authResponse;
  }

 

아래와 같이 잘 입력이 되었습니다~!!

 

728x90
반응형