You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

3.8 KiB

تغییرات API Exchange Token

نسخه جدید (اکتبر 2024)

تغییرات اساسی

1. انتقال API از courses به account

  • قدیمی: /api/courses/auth/exchange-token/
  • جدید: /api/account/exchange-token/

2. تغییر ساختار Response

قدیمی:

{
  "success": true,
  "message": "ورود موفق",
  "user": {
    "id": "123",
    "email": "user@example.com",
    "name": "علی احمدی",
    "role": "admin",
    "is_admin": true
  }
}

جدید:

{
  "success": true,
  "message": "ورود موفق",
  "token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
  "user": {
    "id": 123,
    "fullname": "علی احمدی",
    "email": "user@example.com",
    "avatar": "https://cdn.example.com/avatar.jpg"
  }
}

3. تغییر URL تولید Token موقت

Response قبلی:

{
  "token": "abc123",
  "url": "https://frontend.example.com/join-class?token=abc123",
  "expires_in": 300
}

Response جدید:

{
  "token": "abc123xyz789",
  "url": "https://imamjavad.newhorizonco.uk/join-class?token=abc123xyz789&slug=python-basics",
  "expires_in": 300
}

تغییرات در فیلدها

فیلد قدیمی فیلد جدید توضیحات
user.name user.fullname تغییر نام فیلد
user.id (string) user.id (number) تغییر نوع داده
user.role حذف شد دیگر ارسال نمی‌شود
user.is_admin حذف شد دیگر ارسال نمی‌شود
- token اضافه شد: توکن احراز هویت DRF
- user.avatar اضافه شد: URL تصویر پروفایل

URL ثابت

دیگر از تنظیمات یا environment variable استفاده نمی‌شود. URL ثابت است:

https://imamjavad.newhorizonco.uk/join-class?token={TEMP_TOKEN}&slug={COURSE_SLUG}

مزایای تغییرات

Token واقعی: دیگر نیازی به login مجدد نیست
Avatar: نمایش تصویر پروفایل کاربر
Slug دوره: دسترسی مستقیم به اطلاعات دوره
URL ثابت: عدم وابستگی به تنظیمات
ساده‌تر: حذف فیلدهای اضافی (role, is_admin)

Migration Guide

Frontend (Next.js)

قدیمی:

const user = await api.exchangeToken(tempToken);
localStorage.setItem('user', JSON.stringify(user));

جدید:

const data = await exchangeToken(tempToken);
localStorage.setItem('authToken', data.token); // ⭐ جدید
localStorage.setItem('user', JSON.stringify(data.user));

Flutter

قدیمی:

final user = response['user'];
// نیاز به login مجدد داشت

جدید:

final authToken = response['token']; // ⭐ جدید
final user = response['user'];
// ذخیره token برای درخواست‌های بعدی
await storage.write(key: 'authToken', value: authToken);

Breaking Changes ⚠️

  1. URL تغییر کرد: باید از /api/account/exchange-token/ استفاده شود
  2. فیلد token اجباری است: باید در frontend ذخیره و استفاده شود
  3. فیلد name به fullname تغییر کرد
  4. فیلدهای role و is_admin حذف شدند
  5. URL موقت شامل slug می‌شود

تاریخ اعمال تغییرات

تاریخ: 14 اکتبر 2024

فایل‌های تغییر یافته

  1. apps/account/serializers/auth.py (جدید)
  2. apps/account/views/auth.py (جدید)
  3. apps/account/urls.py (آپدیت)
  4. apps/course/views/course.py (آپدیت: CourseOnlineClassTokenAPIView)
  5. docs/exchange_token_api.md (آپدیت)
  6. docs/online_class_entry_flow.md (آپدیت)