240605 TIL

Jun Young Kim·2024년 6월 5일
0

TIL

목록 보기
35/65

Supabase 인증

Supabase 인증은 다양한 방법을 지원하는 강력하고 유연한 인증 서비스입니다. 이메일/비밀번호, 매직 링크, 소셜 로그인 등을 포함한 여러 인증 방법을 지원합니다. 주요 기능과 구현 방법을 자세히 살펴보겠습니다:

1.이메일 및 비밀번호 인증:

  • 사용자는 이메일 주소와 비밀번호를 사용하여 가입하고 로그인할 수 있습니다.
  • 비밀번호는 안전하게 해시되어 데이터베이스에 저장됩니다.
  • 비밀번호 재설정 기능을 지원합니다.
  1. 매직 링크:
  • 사용자는 비밀번호 없이 매직 링크를 통해 로그인할 수 있습니다.
  • 이메일로 전송된 매직 링크를 클릭하면 자동으로 로그인됩니다.
  1. 소셜 로그인:
  • Google, Facebook, GitHub, Twitter 등 OAuth 제공자를 지원합니다.
  • 사용자가 소셜 미디어 계정을 통해 로그인할 수 있습니다.
  1. 전화 인증:
  • 사용자는 전화번호를 사용하여 인증할 수 있습니다.
  • SMS로 코드를 전송하며, 사용자가 해당 코드를 입력하여 로그인할 수 있습니다.
  1. 서버 측 인증:
  • 안전한 API 호출을 위한 서버 측 인증을 제공합니다.
  • 인증된 사용자만 특정 엔드포인트에 접근할 수 있도록 합니다.

supabase 인증 구현 방법

yarn add @supabse/supabse-js
  1. Supabase 클라이언트 초기화
  • 프로젝트 URL과 API키로 클라이언트를 초기화합니다.
import { createClient } from '@supabase/supabase-js';

const supabaseUrl = 'https://your-project-url.supabase.co';
const supabaseKey = 'your-anon-key';
const supabase = createClient(supabaseUrl, supabaseKey);
  1. 이메일 및 비밀번호 회원가입/로그인
// 회원가입
const signUp = async (email, password) => {
  const { user, error } = await supabase.auth.signUp({
    email,
    password,
  });
  if (error) console.error('회원가입 에러:', error);
  else console.log('회원가입 성공:', user);
};

// 로그인
const signIn = async (email, password) => {
  const { user, error } = await supabase.auth.signIn({
    email,
    password,
  });
  if (error) console.error('로그인 에러:', error);
  else console.log('로그인 성공:', user);
};
  1. 매직 링크 인증
const sendMagicLink = async (email) => {
  const { error } = await supabase.auth.signIn({ email });
  if (error) console.error('매직 링크 전송 에러:', error);
  else console.log('매직 링크 전송 성공:', email);
};
  1. 소셜 로그인
const signInWithProvider = async (provider) => {
  const { user, session, error } = await supabase.auth.signIn({ provider });
  if (error) console.error('소셜 로그인 에러:', error);
  else console.log('소셜 로그인 성공:', user);
};
  1. 전화 인증
const sendOTP = async (phone) => {
  const { error } = await supabase.auth.signIn({ phone });
  if (error) console.error('OTP 전송 에러:', error);
  else console.log('OTP 전송 성공:', phone);
};

const verifyOTP = async (phone, token) => {
  const { user, error } = await supabase.auth.verifyOTP({ phone, token });
  if (error) console.error('OTP 인증 에러:', error);
  else console.log('전화 인증 성공:', user);
};
  1. 서버 측 인증
import jwt from 'jsonwebtoken';

const verifyToken = (req, res, next) => {
  const token = req.headers['authorization'];
  if (!token) return res.status(403).send('토큰이 제공되지 않았습니다.');

  jwt.verify(token, supabaseKey, (err, decoded) => {
    if (err) return res.status(500).send('토큰 인증 실패.');
    req.userId = decoded.id;
    next();
  });
};

결론

Supabase 인증은 웹 또는 모바일 애플리케이션에 쉽게 통합할 수 있는 강력하고 유연한 인증 시스템을 제공합니다. 전통적인 이메일/비밀번호 로그인, 비밀번호 없는 매직 링크, 소셜 로그인, 전화 인증 등 다양한 인증 방법을 지원합니다. 사용하기 쉽고 포괄적인 문서를 제공하여 개발자들이 애플리케이션에 인증을 구현하는 데 매우 유용합니다.

0개의 댓글