목록전체 글 (61)
훈돌라
create or replace function public.handle_user_update()returns trigger as $$declare new_nickname text;begin -- 닉네임 값을 결정 new_nickname := coalesce(nullif(new.raw_user_meta_data->>'display_name', ''), new.raw_user_meta_data->>'full_name'); -- 새로운 데이터 삽입 또는 업데이트 insert into public.users (id, nickname, email) values (new.id, new_nickname, new.email) on conflict (id) do update set nickname =..

'use client';import { useState, useRef, useCallback, useEffect } from 'react';import { supabase } from '@/supabase/client';import { Json } from '@/types/supabase';import { isNoteLineArray } from '@/stores/noteline.store';export interface NoteLine { text: string; fontSize: number; textColor: string;}interface LineNoteProps { userId: string;}const LineNote: React.FCLineNoteProps> = ({ userId }..

Google 제공자 활성화Google Developers Console에서 새 프로젝트를 생성OAuth 동의 화면을 설정합니다. 애플리케이션 이름과 이메일 주소를 입력하고 저장사용자 인증 정보 > 사용자 인증 정보 만들기 > OAuth 클라이언트 ID를 선택애플리케이션 유형으로 웹 애플리케이션을 선택하고, 승인된 리디렉션 URI에 Supabase에서 제공한 URI를 추가생성된 클라이언트 ID와 클라이언트 비밀을 복사하여 Supabase 대시보드의 Google 제공자 설정에 입력 Kakao 제공자 활성화Kakao Developers에서 새 애플리케이션을 생성합니다.앱 설정 > 플랫폼 > Redirect URI에 Supabase에서 제공한 URI를 추가합니다.REST API 키를 복사하여 Supabase 대..

'use client';import React, { useEffect, useState } from 'react';import { useRouter } from 'next/navigation';import ResetPasswordModal from '@/components/molecules/ResetPasswordModal';const ResetPasswordPage: React.FC = () => { const router = useRouter(); const [token, setToken] = useStatestring | null>(null); const [loading, setLoading] = useState(true); useEffect(() => { const queryParam..

'use client';import React, { useState, useEffect } from 'react';import SideButton from '../atoms/SideButton';import GridToggleButton from '../atoms/GridToggleButton';import LoginModal from './LoginModal';import SignupModal from './SignupModal';import { supabase } from '../../supabase/client';import { MainHeaderProps } from '@/types/main';const Header: React.FCMainHeaderProps> = ({ toggleSidebar,..
인증 / 인가MainHeader.tsx'use client';import React, { useState } from 'react';import LoginModal from './LoginModal';import SignupModal from './SignupModal';import { supabase } from '../../supabase/client';const MainHeader: React.FC = () => { const [isLoginModalOpen, setLoginModalOpen] = useState(false); const [isSignupModalOpen, setSignupModalOpen] = useState(false); const handleOpenSignupModal =..