3.8 KiB
Executable file
3.8 KiB
Executable file
سناریو پیادهسازی 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: intuser_id: int(FK to users)token: str(unique, hashed)email: str- ایمیل مورد نظر برای verificationexpires_at: datetime- زمان انقضا (24 ساعت)created_at: datetimeused_at: datetime | None- زمان استفاده (اگر استفاده شده باشد)
Endpoints
-
POST /api/v1/auth/verify-email?token=xxx- بررسی و فعالسازی ایمیل
- Response: success message
-
POST /api/v1/auth/resend-verification- ارسال مجدد ایمیل verification
- نیاز به authentication
- Response: success message
Service Functions
-
create_email_verification_token(db, user_id, email) -> str- ایجاد token و ذخیره در DB
- ارسال ایمیل
- بازگرداندن token (برای تست)
-
verify_email_token(db, token) -> User- بررسی معتبر بودن token
- فعالسازی email_verified
- حذف token
-
can_resend_verification(db, user_id) -> bool- بررسی امکان ارسال مجدد (rate limiting)
-
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 را نمایش دهد