Files
pwa/SUPABASE_SETUP.md
T

241 lines
8.7 KiB
Markdown
Raw Normal View History

2025-11-18 20:22:25 +03:30
# راهنمای کامل اتصال پروژه به Supabase
این راهنما به شما کمک می‌کند که پروژه را به Supabase متصل کنید.
## 📋 پیش‌نیازها
- یک حساب ایمیل (برای ثبت‌نام در Supabase)
- VPN (در صورت فیلتر بودن Supabase در ایران)
---
## 🚀 مرحله 1: ساخت حساب Supabase
1. به آدرس [https://supabase.com](https://supabase.com) بروید
2. روی دکمه **"Start your project"** یا **"Sign Up"** کلیک کنید
3. با یکی از روش‌های زیر ثبت‌نام کنید:
- GitHub
- Google
- ایمیل
4. پس از ثبت‌نام و تأیید ایمیل، وارد Dashboard شوید
---
## 🆕 مرحله 2: ایجاد پروژه جدید
1. در Dashboard، روی دکمه **"New Project"** کلیک کنید
2. اطلاعات زیر را وارد کنید:
- **Name**: نام پروژه شما (مثلاً: `pwa-react-app`)
- **Database Password**: یک رمز عبور قوی انتخاب کنید (حتماً ذخیره کنید!)
- **Region**: نزدیک‌ترین منطقه را انتخاب کنید (مثلاً `West US` یا `Southeast Asia`)
- **Pricing Plan**: Free plan را انتخاب کنید
3. روی **"Create new project"** کلیک کنید
4. **صبر کنید** تا پروژه ایجاد شود (این کار 2-3 دقیقه طول می‌کشد)
---
## 🔑 مرحله 3: دریافت API Keys
1. پس از ایجاد پروژه، به صفحه **Settings** بروید
2. در منوی سمت چپ، روی **"API"** کلیک کنید
3. در این صفحه دو مقدار مهم را پیدا می‌کنید:
- **Project URL**: آدرس پروژه شما
```
https://xxxxxxxxxxxxx.supabase.co
```
- **anon public key**: کلید عمومی (این کلید را می‌توانید در frontend استفاده کنید)
```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
4. این دو مقدار را کپی کنید (بعداً نیاز دارید)
---
## 📝 مرحله 4: ایجاد فایل `.env`
1. در ریشه پروژه (همان فولدری که `package.json` است)، یک فایل جدید با نام `.env` ایجاد کنید
2. محتوای زیر را در آن قرار دهید:
```env
VITE_SUPABASE_URL=https://xxxxxxxxxxxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
**⚠️ توجه**: مقادیر را با اطلاعات واقعی پروژه خود جایگزین کنید!
3. فایل را ذخیره کنید
---
## 🗄️ مرحله 5: ایجاد جداول در Database
1. در Supabase Dashboard، به بخش **SQL Editor** بروید (از منوی سمت چپ)
2. روی دکمه **"New query"** کلیک کنید
3. کد SQL زیر را کپی و در ویرایشگر قرار دهید:
```sql
-- ایجاد جدول requests
create table requests (
id uuid default gen_random_uuid() primary key,
user_id uuid references auth.users(id) on delete cascade not null,
title text not null,
description text not null,
status text default 'pending' check (status in ('pending', 'in_progress', 'completed')),
created_at timestamp with time zone default timezone('utc'::text, now()) not null,
updated_at timestamp with time zone default timezone('utc'::text, now()) not null
);
-- فعال‌سازی Row Level Security
alter table requests enable row level security;
-- Policy: همه می‌توانند درخواست‌ها را ببینند
create policy "Anyone can view requests" on requests
for select using (true);
-- Policy: کاربران می‌توانند درخواست خودشان را ایجاد کنند
create policy "Users can insert their own requests" on requests
for insert with check (auth.uid() = user_id);
-- Policy: کاربران می‌توانند درخواست خودشان را به‌روز کنند
create policy "Users can update their own requests" on requests
for update using (auth.uid() = user_id);
-- ایجاد جدول messages
create table messages (
id uuid default gen_random_uuid() primary key,
user_id uuid references auth.users(id) on delete cascade not null,
content text not null,
created_at timestamp with time zone default timezone('utc'::text, now()) not null
);
-- فعال‌سازی Row Level Security
alter table messages enable row level security;
-- Policy: همه می‌توانند پیام‌ها را ببینند
create policy "Anyone can view messages" on messages
for select using (true);
-- Policy: کاربران احراز هویت شده می‌توانند پیام ارسال کنند
create policy "Authenticated users can insert messages" on messages
for insert with check (auth.uid() = user_id);
```
4. روی دکمه **"Run"** یا **Ctrl+Enter** بزنید
5. اگر همه چیز درست بود، پیام موفقیت را می‌بینید
---
## 🔄 مرحله 6: فعال‌سازی Realtime
برای اینکه تغییرات به صورت real-time نمایش داده شوند:
1. در Dashboard، به بخش **Database** بروید
2. روی **"Replication"** از منوی سمت چپ کلیک کنید
3. برای هر دو جدول (`requests` و `messages`):
- کلید toggle را **فعال** کنید
- یا از منوی dropdown، **"Enable"** را انتخاب کنید
---
## 🔐 مرحله 7: تنظیمات Authentication (اختیاری)
### تنظیم Email Authentication:
به صورت پیش‌فرض فعال است و نیاز به تنظیم اضافی ندارد.
### تنظیم Google OAuth (اختیاری):
اگر می‌خواهید ورود با Google داشته باشید:
1. به [Google Cloud Console](https://console.cloud.google.com) بروید
2. یک پروژه جدید ایجاد کنید یا پروژه موجود را انتخاب کنید
3. به **APIs & Services > Credentials** بروید
4. روی **"Create Credentials > OAuth client ID"** کلیک کنید
5. نوع را **Web application** انتخاب کنید
6. **Authorized redirect URIs** را اضافه کنید:
```
https://xxxxxxxxxxxxx.supabase.co/auth/v1/callback
```
(URL پروژه Supabase خود را جایگزین کنید)
7. **Client ID** و **Client Secret** را کپی کنید
8. در Supabase Dashboard:
- به **Authentication > Providers** بروید
- **Google** را پیدا کنید و فعال کنید
- Client ID و Client Secret را وارد کنید
- ذخیره کنید
---
## ✅ مرحله 8: تست اتصال
1. سرور توسعه را متوقف کنید (اگر در حال اجراست)
2. دوباره اجرا کنید:
```bash
npm run dev
```
3. به آدرس `http://localhost:5173` یا `http://localhost:5174` بروید
4. باید بنر زرد (حالت offline) **ناپدید** شود
5. صفحه Login را ببینید
6. یک حساب کاربری جدید بسازید و تست کنید
---
## 🐛 رفع مشکلات
### مشکل: صفحه سفید یا خطا در console
**راه‌حل:**
- مطمئن شوید فایل `.env` در ریشه پروژه است
- مقادیر URL و KEY را دوباره بررسی کنید
- سرور را restart کنید
### مشکل: خطای "Invalid API key"
**راه‌حل:**
- کلید `anon key` را دوباره از Settings > API کپی کنید
- مطمئن شوید کلید کامل است و فضای خالی اضافی ندارد
### مشکل: خطای Database connection
**راه‌حل:**
- مطمئن شوید جداول را ایجاد کرده‌اید (مرحله 5)
- بررسی کنید که Row Level Security policies درست تنظیم شده‌اند
### مشکل: Realtime کار نمی‌کند
**راه‌حل:**
- مطمئن شوید Realtime را برای جداول فعال کرده‌اید (مرحله 6)
---
## 📚 منابع بیشتر
- [مستندات Supabase](https://supabase.com/docs)
- [راهنمای Authentication](https://supabase.com/docs/guides/auth)
- [راهنمای Database](https://supabase.com/docs/guides/database)
---
## 🎉 تبریک!
اگر همه مراحل را با موفقیت انجام دادید، پروژه شما باید به Supabase متصل شده باشد و تمام ویژگی‌ها کار کنند.
**خلاصه کارهایی که انجام دادید:**
- ✅ حساب Supabase ساختید
- ✅ پروژه جدید ایجاد کردید
- ✅ API Keys را دریافت کردید
- ✅ فایل `.env` را ساختید
- ✅ جداول Database را ایجاد کردید
- ✅ Realtime را فعال کردید
اگر سوالی دارید یا مشکلی پیش آمد، می‌توانید از مستندات Supabase یا تیم پشتیبانی کمک بگیرید.