# سیستم احراز هویت پلتفرم همدست ## نحوه کارکرد ### 1. ورود به سیستم کاربران از طریق شماره موبایل و کد تایید ۵ رقمی وارد سیستم می‌شوند. **مراحل:** 1. ورود شماره موبایل در صفحه `/login` 2. ارسال درخواست به API: `/api/SignUpLoginBySMS` 3. دریافت کد تایید ۵ رقمی از طریق پیامک 4. وارد کردن کد تایید 5. ارسال درخواست تایید به API: `/api/verifyloginbysms` 6. دریافت اطلاعات کاربر و توکن‌ها 7. ذخیره اطلاعات در localStorage 8. هدایت به صفحه اصلی ### 2. اطلاعات ذخیره شده در localStorage پس از ورود موفق، اطلاعات زیر ذخیره می‌شود: ```javascript { "accessToken": "ACCESS_TOKEN", // توکن دسترسی "refreshToken": "REFRESH_TOKEN", // توکن تازه‌سازی "userId": "1025", // شناسه کاربر "username": "1025", // یوزرنیم (همان ID کاربر) "userInfo": "{...}" // اطلاعات کامل کاربر (JSON string) } ``` ### 3. محافظت از صفحات (Protected Routes) تمام صفحات پلتفرم (به جز صفحه لاگین) با `ProtectedRoute` محافظت شده‌اند. **نحوه کار:** - قبل از نمایش هر صفحه، توکن کاربر بررسی می‌شود - اگر توکن معتبر نباشد، کاربر به صفحه لاگین هدایت می‌شود - پیام خطا نمایش داده می‌شود ### 4. خروج از سیستم کاربر می‌تواند از صفحه پروفایل خارج شود. **مراحل:** 1. کلیک روی دکمه "خروج از حساب کاربری" 2. پاک کردن تمام اطلاعات از localStorage 3. هدایت به صفحه لاگین 4. نمایش پیام تایید خروج ## فایل‌های مرتبط ### `/src/utils/auth.ts` توابع کمکی احراز هویت: - `isTokenValid()` - بررسی معتبر بودن توکن - `getUserInfo()` - دریافت اطلاعات کاربر - `getAccessToken()` - دریافت توکن دسترسی - `getUsername()` - دریافت یوزرنیم - `logout()` - خروج از سیستم - `requireAuth()` - بررسی احراز هویت ### `/src/app/components/ProtectedRoute.tsx` کامپوننت محافظت از مسیرها: - بررسی توکن قبل از نمایش صفحه - نمایش Loading در حین بررسی - Redirect به لاگین در صورت عدم احراز هویت ### `/src/app/components/LoginPage.tsx` صفحه ورود: - ورود با شماره موبایل - دریافت و تایید کد ۵ رقمی - ذخیره اطلاعات کاربر - Redirect به صفحه اصلی پس از ورود موفق ### `/src/app/routes.ts` تعریف مسیرها: - مسیر `/login` آزاد - سایر مسیرها محافظت شده با `ProtectedRoute` ### `/src/config/api.ts` تنظیمات API: - آدرس پایه API - قابل تغییر برای محیط‌های مختلف ## نحوه استفاده ### بررسی وضعیت لاگین در کامپوننت‌ها: ```typescript import { isTokenValid, getUserInfo } from "../../utils/auth"; function MyComponent() { const isLoggedIn = isTokenValid(); const userInfo = getUserInfo(); if (isLoggedIn && userInfo) { console.log(`کاربر: ${userInfo.Name} ${userInfo.Family}`); } } ``` ### خروج از سیستم: ```typescript import { logout } from "../../utils/auth"; import { useNavigate } from "react-router"; function LogoutButton() { const navigate = useNavigate(); const handleLogout = () => { logout(); navigate("/login"); }; return ; } ``` ## نکات امنیتی ⚠️ **توجه:** در حال حاضر سیستم احراز هویت فقط بررسی وجود توکن را انجام می‌دهد. **برای محیط Production باید:** 1. اعتبار سنجی تاریخ انقضای توکن اضافه شود 2. سیستم Refresh Token پیاده‌سازی شود 3. توکن‌ها در هر درخواست API ارسال شوند 4. بررسی سمت سرور انجام شود ## تنظیمات API برای تغییر آدرس API، فایل `/src/config/api.ts` را ویرایش کنید: ```typescript export const API_BASE_URL = "https://your-domain.com"; ```