امروزه در بسیاری از اپلیکیشنها و سرویسهای آنلاین، API نقش مهمی در برقراری ارتباط میان بخشهای مختلف نرمافزار و مدیریت دادهها دارد. یکی از مهمترین قابلیتهایی که تقریباً در تمامی پروژههای نرمافزاری مورد نیاز است، امکان ثبتنام و ورود کاربران است.
فریمورک Flask، به عنوان یکی از سبکترین و در عین حال قدرتمندترین فریمورکهای Python، ابزاری عالی برای توسعه APIها محسوب میشود. این فریمورک به دلیل انعطافپذیری و سادگی خود، گزینهای ایدهآل برای توسعهدهندگان مبتدی و حتی حرفهای است.
در این مقاله قصد داریم به شما نحوهی ساخت API ثبتنام و ورود کاربران را با استفاده از Python و Flask به صورت قدمبهقدم آموزش دهیم. این آموزش به شما کمک میکند تا مفاهیمی مانند احراز هویت کاربران، استفاده از JWT، و ایمنسازی دادههای حساس را بهتر درک کنید.
در پایان این آموزش، شما یک API خواهید داشت که شامل قابلیتهای زیر است:
- ثبتنام کاربران جدید.
- ورود کاربران و دریافت توکن JWT برای احراز هویت.
- ایمنسازی اطلاعات کاربران با استفاده از هش کردن رمز عبور.
در ادامه ابتدا پیشنیازها و ابزارهای مورد نیاز را معرفی خواهیم کرد و سپس به پیادهسازی API خواهیم پرداخت. اگر به دنبال یادگیری کاربردی Python و Flask هستید، این آموزش بهترین نقطهی شروع برای شما خواهد بود.
پیشنیازها و ابزارهای مورد نیاز
برای شروع پیادهسازی API ثبتنام و ورود کاربران با استفاده از Flask، ابتدا باید پیشنیازها و ابزارهای مورد نیاز را آماده کنیم. این بخش شامل معرفی ابزارها، نصب وابستگیها، و تنظیمات اولیه است.
ابزارها و کتابخانههای مورد نیاز
برای اجرای این پروژه، به ابزارها و کتابخانههای زیر نیاز داریم:
- Python: زبان برنامهنویسی اصلی پروژه. پیشنهاد میشود از نسخه 3.8 یا بالاتر استفاده کنید.
- Flask: فریمورک سبک و قدرتمند برای توسعه وب و API.
- Flask-SQLAlchemy: برای مدیریت پایگاه داده به روش ORM.
- Flask-Bcrypt: برای هش کردن رمز عبور کاربران.
- Flask-JWT-Extended: برای مدیریت توکنهای JWT و احراز هویت کاربران.
نصب کتابخانهها
ابتدا باید Python و pip (مدیر بستهی Python) را روی سیستم خود نصب کنید. سپس با استفاده از دستور زیر، تمامی کتابخانههای مورد نیاز را نصب کنید:
این دستور تمام وابستگیهای ضروری را روی سیستم شما نصب خواهد کرد.
تنظیم محیط کاری
برای شروع، یک پوشه جدید برای پروژه ایجاد کرده و فایلها را به صورت زیر سازماندهی کنید:
project/
├── app.py # فایل اصلی برای اجرای برنامه
├── models.py # تعریف مدلهای پایگاه داده
├── routes/
│ ├── auth.py # مسیرهای مربوط به ثبتنام و ورود کاربران
├── database/
│ ├── db_config.py # تنظیمات پایگاه داده
├── utils/
│ ├── validators.py # توابع کمکی برای اعتبارسنجی
بررسی نصب موفق کتابخانهها
پس از نصب کتابخانهها، میتوانید با اجرای دستورات زیر از نصب صحیح اطمینان حاصل کنید:
اگر هیچ خطایی دریافت نکردید، محیط کاری شما آماده است.
تنظیم فایل اصلی (app.py)
یک فایل به نام app.py
ایجاد کنید و تنظیمات اولیه Flask را در آن وارد کنید:
- JWT_SECRET_KEY: یک کلید امنیتی برای امضای توکنهای JWT. این مقدار باید در پروژه واقعی امن نگه داشته شود.
آمادهسازی پایگاه داده
در این پروژه از SQLite به عنوان پایگاه داده استفاده میکنیم. برای این منظور، فایل db_config.py
را ایجاد کرده و تنظیمات پایگاه داده را در آن وارد کنید:
سپس در فایل app.py
پایگاه داده را مقداردهی کنید:
با انجام این مراحل، محیط کاری شما برای ادامه آماده است. در بخش بعدی، به طراحی مدل کاربر میپردازیم.
استفاده از ابزار تبدیل کد به API بکندباز
اگر نمیخواهید درگیر نصب ابزارها، تنظیم محیط کاری، یا کار با سرور شوید، میتوانید به راحتی از ابزار تبدیل کد به API بکندباز استفاده کنید. این ابزار به شما امکان میدهد تا کدهای خود را بدون نیاز به دانش فنی پیشرفته و در کمترین زمان به یک API حرفهای تبدیل کنید.
در انتهای مقاله، نحوه استفاده از این ابزار را به طور کامل توضیح خواهیم داد تا بتوانید به سرعت و بدون دردسر API ثبتنام و ورود کاربران خود را راهاندازی کنید.
طراحی مدلها
در این بخش، مدل کاربر را طراحی میکنیم تا اطلاعات کاربران در پایگاه داده ذخیره شود. برای این کار از SQLAlchemy استفاده میکنیم که یک ORM قدرتمند برای مدیریت پایگاه داده در Flask است.
تعریف مدل کاربر
مدل کاربر شامل اطلاعاتی است که برای ثبتنام و ورود کاربران نیاز داریم. این اطلاعات شامل موارد زیر است:
- id: شناسهی یکتا برای هر کاربر.
- username: نام کاربری.
- email: ایمیل کاربر.
- hashed_password: رمز عبور هش شده برای امنیت بیشتر.
ابتدا فایل models.py
را ایجاد کرده و کد زیر را در آن قرار دهید:
توضیح کد:
- id:
- نوع: عدد صحیح.
- ویژگی: کلید اصلی (Primary Key).
- username:
- نوع: رشته (حداکثر 50 کاراکتر).
- ویژگی: باید یکتا باشد (Unique).
- email:
- نوع: رشته (حداکثر 100 کاراکتر).
- ویژگی: باید یکتا باشد.
- hashed_password:
- نوع: رشته (برای ذخیره رمز عبور هش شده).
توابع کمکی:
set_password
: رمز عبور را با استفاده از Flask-Bcrypt هش میکند و مقدار هش شده را ذخیره میکند.check_password
: رمز عبور وارد شده را با مقدار هش شده مقایسه میکند و در صورت مطابقت، مقدارTrue
باز میگرداند.
مقداردهی اولیه پایگاه داده
برای ایجاد جدول کاربران در پایگاه داده، باید از کد زیر در فایل app.py
استفاده کنید:
این کد تضمین میکند که جداول پایگاه داده در اولین اجرای برنامه ایجاد شوند.
تست مدل کاربر
برای اطمینان از عملکرد مدل، میتوانید یک کاربر آزمایشی را به پایگاه داده اضافه کنید:
با اجرای این مسیر (/create-test-user
)، یک کاربر نمونه در پایگاه داده ایجاد میشود.
در این مرحله، مدل کاربر طراحی و آماده استفاده است. در بخش بعدی، به پیادهسازی مسیرهای API برای ثبتنام و ورود کاربران میپردازیم.
پیادهسازی API
در این بخش، دو endpoint اصلی برای ثبتنام و ورود کاربران پیادهسازی میکنیم. این endpointها به ترتیب وظیفه دریافت اطلاعات کاربران جدید و احراز هویت کاربران موجود را بر عهده دارند.
ساخت endpoint ثبتنام
ابتدا مسیر ثبتنام کاربران را ایجاد میکنیم. این مسیر اطلاعات کاربر (نام کاربری، ایمیل و رمز عبور) را دریافت کرده و آنها را پس از اعتبارسنجی در پایگاه داده ذخیره میکند.
در فایل auth.py
(داخل پوشه routes
) کد زیر را اضافه کنید:
توضیح کد:
- دریافت دادهها از کاربر:
- اطلاعات
username
،email
وpassword
از درخواست JSON گرفته میشوند.
- اطلاعات
- اعتبارسنجی دادهها:
- بررسی میشود که هیچکدام از فیلدها خالی نباشند.
- بررسی یکتا بودن اطلاعات:
- اطمینان حاصل میشود که نام کاربری و ایمیل قبلاً ثبت نشده باشند.
- ذخیره کاربر جدید در پایگاه داده:
- رمز عبور هش شده و اطلاعات کاربر ذخیره میشود.
ساخت endpoint ورود
این مسیر اطلاعات کاربر (ایمیل و رمز عبور) را دریافت کرده و پس از احراز هویت، یک توکن JWT تولید میکند.
در ادامه به فایل auth.py
کد زیر را اضافه کنید:
توضیح کد:
- دریافت دادهها از درخواست:
- اطلاعات
email
وpassword
از درخواست JSON گرفته میشوند.
- اطلاعات
- احراز هویت کاربر:
- کاربر بر اساس ایمیل جستجو شده و رمز عبور وارد شده بررسی میشود.
- تولید توکن JWT:
- یک توکن دسترسی با استفاده از اطلاعات کاربر تولید و به کلاینت بازگردانده میشود.
افزودن مسیرها به برنامه اصلی
برای استفاده از مسیرهای بالا، فایل app.py
را بهروزرسانی کنید:
تست API
برای تست مسیرهای ثبتنام و ورود:
- از ابزار Postman یا curl استفاده کنید.
- یک درخواست
POST
به/auth/register
ارسال کرده و اطلاعات کاربر را وارد کنید. - یک درخواست
POST
به/auth/login
ارسال کرده و ایمیل و رمز عبور کاربر را امتحان کنید.
با انجام این مراحل، API شما قابلیت ثبتنام و ورود کاربران را فراهم میکند. در بخش بعدی، به نحوه تست، بهبود امنیت و توضیحات مربوط به ابزار تبدیل کد به API بکندباز خواهیم پرداخت.
تست و بهبود امنیت API
اکنون که API ثبتنام و ورود کاربران را پیادهسازی کردیم، باید از عملکرد صحیح آن اطمینان حاصل کنیم و برخی نکات امنیتی را برای بهبود ایمنی دادهها اضافه کنیم. در این بخش، به موارد زیر میپردازیم:
- تست API با ابزار Postman.
- نوشتن تستهای خودکار.
- نکات امنیتی برای ایمنسازی API.
تست API با ابزار Postman
- تست مسیر ثبتنام:
- در Postman، یک درخواست
POST
به آدرس/auth/register
ایجاد کنید. - در تب Body، دادههای زیر را به فرمت JSON وارد کنید:
- روی Send کلیک کنید. اگر دادهها درست باشند، باید پاسخ زیر را دریافت کنید:
- در Postman، یک درخواست
- تست مسیر ورود:
- یک درخواست
POST
به آدرس/auth/login
ارسال کنید. - در تب Body، دادههای ورود کاربر را به فرمت JSON وارد کنید:
- در صورت موفقیت، پاسخ زیر باز خواهد گشت:
- یک درخواست
نوشتن تستهای خودکار
تست خودکار API با استفاده از unittest
میتواند به شناسایی باگها و تضمین عملکرد صحیح کمک کند. برای مثال:
برای اجرای تستها:
نکات امنیتی برای بهبود API
- استفاده از HTTPS:
- مطمئن شوید که API شما در محیط واقعی از پروتکل HTTPS استفاده میکند تا دادهها رمزنگاری شوند.
- Rate Limiting:
- برای جلوگیری از حملات brute force، تعداد درخواستهای ورود را محدود کنید. با استفاده از کتابخانه
Flask-Limiter
میتوانید این کار را انجام دهید:سپس در فایل
app.py
:
- برای جلوگیری از حملات brute force، تعداد درخواستهای ورود را محدود کنید. با استفاده از کتابخانه
- اعتبارسنجی دادههای ورودی:
- اطمینان حاصل کنید که ایمیلها و رمز عبورهای وارد شده از الگوهای استاندارد پیروی میکنند. میتوانید از توابع کمکی در فایل
validators.py
استفاده کنید:
- اطمینان حاصل کنید که ایمیلها و رمز عبورهای وارد شده از الگوهای استاندارد پیروی میکنند. میتوانید از توابع کمکی در فایل
- ذخیره ایمن توکنها:
- توکنهای JWT را در سمت کلاینت با امنیت کامل ذخیره کنید (ترجیحاً در
HttpOnly Cookies
).
- توکنهای JWT را در سمت کلاینت با امنیت کامل ذخیره کنید (ترجیحاً در
استفاده از ابزار تبدیل کد به API بکندباز
اگر نمیخواهید درگیر مراحل نصب، تنظیمات محیط، و کدنویسی شوید، میتوانید از ابزار تبدیل کد به API بکندباز استفاده کنید. این ابزار به شما این امکان را میدهد که کدهای Python خود را مستقیماً به یک API قابل استفاده تبدیل کنید. کافی است:
- وارد وبسایت بکندباز شوید.
- کد خود را در ابزار تبدیل کپی کنید.
- API ساختهشده را دریافت کنید و در پروژه خود استفاده کنید.
این ابزار مخصوصاً برای توسعهدهندگانی که میخواهند در زمان صرفهجویی کنند بسیار کاربردی است.
دیدگاهها