Skip to main content
#P1445

POST /api/v2/auth/by

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/auth/by UserController@authBy authWithJwt ورود اپراتور از طریق شناسه پرسنلی و تولید توکن JWT معتبر برای شعبه فعلی.

منطق عملکرد

  • دریافت داده پرسنلی از request->data.
  • واکشی User از DB بر اساس personnel_id و شعبه فعلی، با شرط عدم‌مسدود بودن حساب (blocked_up <= now() یا null).
  • Parse کامل User-Agent با DeviceDetector و تولید payload برای JWT.
  • تولید توکن با الگوریتم HS256 و کلید JWT_SECRET_KEY.
  • در صورت فعال بودن کاربر (status==1)، ترکیب داده کامل پروفایل اپراتور و بازگرداندن access_token.
  • در صورت غیرفعال بودن یا نبود کاربر، بازگرداندن ساختار خطا با پیام مناسب فارسی.
  • ثبت لاگ LoginAuthBy در صف تأخیری.

پارامترهای ورودی

نام پارامتر نوع ضروری توضیح
data.personnelId integer بله کد پرسنلی اپراتور.
branch integer بله شناسه شعبه برای بررسی دسترسی.
Domain header string بله دامنه مبدا برای ایجاد توکن JWT.

نمونه خروجی موفق

{
 "user": {
   "uuid": 12,
   "from": "users",
   "role": "admin",
   "isAirPlusAdmin": true,
   "data": { "displayName": "علیرضا ایرانپور", "email": "alireza@example.com", "branch": [0,14] },
   "shortcuts": ["temporary-registration","trade-management"]
 },
 "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6..."
}

امنیت

مبتنی بر JWT با طول عمر ۷ روز (exp=+604800). هر اپراتور فقط برای شعبه مجاز خود توکن دریافت می‌کند.

  • Carbon
  • DeviceDetector & ClientHints
  • JWT Facade
  • Redis
  • SystemLog

میانگین زمان پاسخ: 25ms (شامل پردازش User-Agent).

  • خطا در ناهماهنگی شناسه پرسنلی → پیام فارسی "اطلاعاتی کاربری برای این دفتر همخوانی ندارد".

تغییر در وضعیت session اپراتور؛ ایجاد توکن جدید و ذخیره کش میانبرها.

ثبت لاگ نوع LoginAuthBy همراه اطلاعات شعبه و IP اپراتور در صف snailJob.

  • اضافه کردن expiration پویا بر اساس نوع دسترسی (کاربر اداری، مدیر).
  • افزودن تخمین GeoIP در payload برای امنیت بیشتر.

این Endpoint احراز هویت استاندارد JWT را برای سیستم شعبات پیاده‌سازی می‌کند و ساختار امنیتی Session اپراتور را پوشش می‌دهد.