#P1386
POST /api/auth/update
Route Info
| Method | Endpoint | Controller | Middleware | Purpose | تگ Swagger |
| POST | /api/auth/update | UserController@update | domainAccess, ipTrust | بهروزرسانی دادههای رابط کاربری اپراتور (shortcuts) از سمت کلاینت | tags={“Auth”} |
توضیح عملکرد (Function Logic)
تابع
update() مسئول همگامسازی اطلاعات رابط کاربری اپراتور با سرور است. اطلاعات از جمله میانبرها (shortcuts) از سمت کلاینت ارسال شده و در Redis ذخیره میشوند. اگر IP فعلی کاربر با IP ثبتشده در توکن JWT مطابقت نداشته باشد، خطایی با نوع changeIp بازگردانده میشود. عملکرد تابع شامل مراحل زیر است:
- دریافت ورودی
dataاز درخواست. - تحلیل و اعتبارسنجی توکن
access_tokenبا استفاده از JWT::decode. - مقایسه IP کاربر فعلی با IP ذخیرهشده در توکن (
uip). - در صورت تطابق، یافتن اپراتور بر اساس
uuidاستخراجشده از JWT. - اگر اپراتور فعال باشد (
status == 1)، دادهٔ shortcuts جدید در Redis ذخیره میشود. - در صورت غیرفعال بودن وضعیت اپراتور، پیام خطا بازگردانده میشود.
- اگر IP تغییر کرده باشد، جزئیات هر دو IP در خروجی خطا قرار میگیرد.
- در صورت بروز هر Exception، محتوا و
traceبازگردانده میشود.
ورودیها (Inputs)
| پارامتر | نوع داده | الزامی | توضیح |
| branch | integer | بله | شناسه شعبهای که کاربر در آن وارد شده است. |
| data.access_token | string (JWT) | بله | توکن JWT معتبر که شامل شناسه کاربر (uuid)، IP و زمان صدور است. |
| data.user.data.shortcuts | array | بله | لیست میانبرهای جدید رابط کاربری اپراتور که باید در Redis ذخیره شوند. |
نمونه درخواست:
POST /api/auth/update
Content-Type: application/json
{
“branch”: 1,
“data”: {
“access_token”: “jwt.token.value”,
“user”: {
“data”: {
“shortcuts”: [“dashboard”, “customers”, “tickets”]
}
}
}
}
خروجیها (Outputs)
پاسخ موفق (HTTP 200)
{}
(در صورت موفقیت، بدنه پاسخ خالی و بدون خطا بازگردانده میشود.)
وضعیت غیرفعال کاربر
{
“error”: {
“type”: “personnelId”,
“message”: “وضعیت شما بصورت غیرفعال می باشد.”
}
}
تغییر IP کاربر
{
“error”: {
“type”: “changeIp”,
“message”: “وضعیت اینترنت شما تغییر پیدا کرده”,
“details”: {
“token_ip”: “192.168.1.10”,
“current_ip”: “5.114.200.88”
}
}
}
خطا در پردازش
{
“error”: {
“type”: “personnelId”,
“message”: “Signature verification failed”,
“trace”: […]
}
}
منطق تشخیص IP مجاز
در هنگام بررسی صحت IP، سیستم IP توکن را با IP جاری تطبیق میدهد. سرویس آدرسهای داخلی (Local IP Range) را مجاز میداند:
- 192.168..
- 10...*
- 172.16..
ذخیره اطلاعات در Redis
Redis::set(
𝑟𝑒𝑞𝑢𝑒𝑠𝑡−>𝑔𝑒𝑡(′𝑏𝑟𝑎𝑛𝑐ℎ′).′𝑜𝑝𝑒𝑟𝑎𝑡𝑜𝑟:′.
request−>get( ′branch ′). ′operator:′.
Operator->id . ‘:shortcuts’,
json_encode($data[‘user’][‘data’][‘shortcuts’]));
اطلاعات ذخیرهشده در Redis جهت شخصیسازی محیط کاربری اپراتور در ورودهای بعدی استفاده میشوند.
مدیریت استثناها (Exceptions)
- Token نامعتبر یا منقضی شده: پیام Signature Verification Failed
- خطا در ساختار درخواست: بازگرداندن Exception عمومی با Trace
وابستگیها (Dependencies)
use Firebase\JWT\JWT;use Firebase\JWT\Key;use Illuminate\Support\Facades\Redis;use App\Models\User;use Exception;
مثال تست (Postman Example)
POST https://console.service01.ir/api/auth/update
Content-Type: application/json
{
“branch”: 2,
“data”: {
“access_token”: “jwt.token.value”,
“user”: {
“data”: {
“shortcuts”: [“dashboard”, “customers”, “trade-management”]
}
}
}
}
تحلیل امنیتی
- از IP واقعی کاربر برای مطابقت توکن استفاده میشود (افزایش امنیت session).
- رمزگشایی JWT تنها با کلید محیطی
JWT_SECRET_KEYانجام میشود. - هیچ دادهای بازگردانده نمیشود تا احتمال افشای Token یا داده کاهش یابد.
- درخواستها فقط از دامنههای معتبر (domainAccess) و IP مجاز (ipTrust) پذیرفته میشوند.
نتیجه عملکرد (Summary Result)
این Endpoint بهطور خاص برای همگامسازی دادههای رابط کاربری طراحی شده تا تجربه کاربر در اتوماسیون حفظ شود. در صورت تغییر IP یا وضعیت کاربر، کلاینت باید فرآیند Sign-In را تکرار نماید.
پیوست: نگهداری و بهینهسازی
- اطلاعات Redis میتوانند با TTL (Time To Live) مدیریت شوند تا از انباشت داده جلوگیری شود.
- در صورت تغییر ساختار shortcuts، مطابقت نسخه کلاینت الزامی است.
- در نسخههای بعدی، API میتواند بازگشت وضعیت موفقیت با پیام استاندارد ارائه دهد.