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