241 lines
8.7 KiB
Markdown
241 lines
8.7 KiB
Markdown
# راهنمای کامل اتصال پروژه به 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 یا تیم پشتیبانی کمک بگیرید.
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|