AlvandCMS از یک سیستم احراز هویت مدرن و امن با پشتیبانی از JWT، OTP، کپچا و محدودیت نرخ استفاده میکند. تمام منطق احراز هویت در مسیر core/system/api/auth/ قرار دارد.
معماری
Client Request
|
v
core/system/api/auth/
|-- common.php # توابع پایه (JSON, CSRF, Settings, CAPTCHA)
|-- schema.php # اسکیما
|-- schema_helpers.php
|-- login-password.php # ورود با رمز عبور
|-- register.php # ثبتنام
|-- logout.php # خروج
|-- verify-otp.php # تایید OTP
|-- me.php # اطلاعات کاربر جاری
|-- reset/ # بازیابی رمز عبور
|-- csrf.php # توکن CSRF
|-- captcha.php # تولید کپچا
|-- start.php # شروع احراز هویت
روشهای احراز هویت
ورود با رمز عبور
php
function user_login_password(string $identifier, string $password): int
پشتیبانی از هشهای قدیمی (SHA1) با مهاجرت خودکار به BCrypt.
ورود با OTP
ارسال کد یکبار مصرف از طریق SMS یا ایمیل.
JWT Token
پس از احراز هویت، یک JWT Token در کوکی jwt_token ذخیره میشود:
php
setcookie('jwt_token', $jwt_token, [
'expires' => time() + 30 * 24 * 60 * 60,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
تنظیمات احراز هویت
تنظیمات در جدول settings با کلید login-register و related=general ذخیره میشود:
php
[
'enable_email_login' => true,
'enable_sms_login' => true,
'require_password' => true,
'otp_length' => 4,
'max_login_attempts' => 5,
'captcha_enable' => true
]
محدودیت نرخ (Rate Limiting)
سیستم محدودیت نرخ Session-based با:
- تنظیم حداکثر تلاش در یک بازه زمانی
- قفل شدن خودکار کاربر پس از تلاشهای ناموفق
- پاکسازی خودکار لاگهای قدیمی
php
function attempts_ok(string $identifier, array $as): array
کپچا
کپچای SVG با پشتیبانی از:
- اعداد
- حروف لاتین
- ترکیبی
- حروف فارسی
- نویز خطوط تصادفی
- چرخش تصادفی کاراکترها
سرویسهای احراز هویت
- ورود با رمز عبور - روش سنتی
- ورود با OTP - کد یکبار مصرف
- ثبتنام - ایجاد حساب جدید
- بازیابی رمز عبور - از طریق ایمیل یا SMS
- خروج - پاک کردن نشست
API های احراز هویت
| مسیر | توضیح |
|---|---|
POST /api/auth/login-password | ورود با رمز |
POST /api/auth/register | ثبتنام |
POST /api/auth/logout | خروج |
GET /api/auth/me | اطلاعات کاربر |
POST /api/auth/verify-otp | تایید OTP |
GET /api/auth/csrf | توکن CSRF |
GET /api/auth/captcha | کد کپچا |
POST /api/auth/reset/request | درخواست بازیابی |
POST /api/auth/reset/confirm | تایید بازیابی |