Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/docs/EMAIL_VERIFICATION_SCENARIO.md
2026-04-14 19:34:55 +03:30

103 lines
3.8 KiB
Markdown
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# سناریو پیاده‌سازی Email Verification
## سناریو کلی
### 1. ثبت‌نام کاربر
- کاربر با ایمیل و رمز عبور ثبت‌نام می‌کند
- اگر `enable_email_verification` فعال باشد:
- یک verification token ایجاد می‌شود
- یک ایمیل verification با لینک فعال‌سازی ارسال می‌شود
- فیلد `email_verified` در User به `False` تنظیم می‌شود
- کاربر می‌تواند login کند اما با محدودیت‌های خاص
### 2. ارسال ایمیل Verification
- ایمیل شامل:
- لینک فعال‌سازی: `/api/v1/auth/verify-email?token=xxx`
- توضیحات: "برای فعال‌سازی حساب کاربری خود روی لینک کلیک کنید"
- زمان انقضا: 24 ساعت
### 3. فعال‌سازی ایمیل
- کاربر روی لینک کلیک می‌کند
- سیستم token را بررسی می‌کند:
- معتبر بودن token
- عدم انقضای token
- تعلق token به کاربر
- در صورت معتبر بودن:
- `email_verified` به `True` تنظیم می‌شود
- token حذف می‌شود
- پیام موفقیت برمی‌گردد
### 4. محدودیت‌های کاربر غیرفعال‌سازی شده
- کاربر می‌تواند login کند
- اما دسترسی به برخی endpoint ها محدود است:
- ایجاد کسب‌وکار جدید
- تغییر ایمیل
- برخی عملیات حساس
### 5. ارسال مجدد ایمیل Verification
- اگر کاربر ایمیل را دریافت نکرده باشد
- endpoint: `/api/v1/auth/resend-verification`
- بررسی: حداکثر 3 بار در ساعت
### 6. بررسی در Login
- اگر `enable_email_verification` فعال باشد و `email_verified = False`:
- کاربر می‌تواند login کند
- اما یک flag در response برمی‌گردد: `email_verified: false`
- فرانت‌اند باید صفحه verification را نمایش دهد
## ساختار داده
### User Model
- `email_verified: bool = False` - وضعیت تایید ایمیل
### EmailVerificationToken Model
- `id: int`
- `user_id: int` (FK to users)
- `token: str` (unique, hashed)
- `email: str` - ایمیل مورد نظر برای verification
- `expires_at: datetime` - زمان انقضا (24 ساعت)
- `created_at: datetime`
- `used_at: datetime | None` - زمان استفاده (اگر استفاده شده باشد)
## Endpoints
1. `POST /api/v1/auth/verify-email?token=xxx`
- بررسی و فعال‌سازی ایمیل
- Response: success message
2. `POST /api/v1/auth/resend-verification`
- ارسال مجدد ایمیل verification
- نیاز به authentication
- Response: success message
## Service Functions
1. `create_email_verification_token(db, user_id, email) -> str`
- ایجاد token و ذخیره در DB
- ارسال ایمیل
- بازگرداندن token (برای تست)
2. `verify_email_token(db, token) -> User`
- بررسی معتبر بودن token
- فعال‌سازی email_verified
- حذف token
3. `can_resend_verification(db, user_id) -> bool`
- بررسی امکان ارسال مجدد (rate limiting)
4. `send_verification_email(db, user_id, token) -> bool`
- ارسال ایمیل verification
## تغییرات در Register
- اگر `enable_email_verification` فعال باشد:
- `email_verified = False` تنظیم می‌شود
- verification token ایجاد می‌شود
- ایمیل ارسال می‌شود
## تغییرات در Login
- Response شامل `email_verified` می‌شود
- اگر `email_verified = False`:
- فرانت‌اند باید صفحه verification را نمایش دهد