رائع! بناء نظام تسجيل دخول من الصفر يمنحك تحكمًا كاملاً في الأمان والتفاعل. سأساعدك بخطوات عملية لإنشاء نظام تسجيل دخول يدويًا باستخدام Python (Flask) وMySQL، مع التركيز على الأمان والمرونة.
🔹 1. إعداد البيئة
أولًا، تأكد من تثبيت الأدوات الأساسية:
pip install flask flask-mysql flask-bcrypt flask-jwt-extended
- Flask: لإنشاء التطبيق.
- Flask-MySQL: للتعامل مع قاعدة البيانات.
- Flask-Bcrypt: لتشفير كلمات المرور.
- Flask-JWT-Extended: لإدارة الجلسات باستخدام JSON Web Tokens (JWT).
🔹 2. إنشاء قاعدة البيانات
في MySQL، أنشئ قاعدة بيانات وجدول المستخدمين:
CREATE DATABASE user_auth;
USE user_auth;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL
);
🔹 3. إعداد التطبيق في Flask
from flask import Flask, request, jsonify
from flask_bcrypt import Bcrypt
from flask_jwt_extended import JWTManager, create_access_token
import pymysql
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'your_secret_key' # مفتاح سري للجلسات
bcrypt = Bcrypt(app)
jwt = JWTManager(app)
# الاتصال بقاعدة البيانات
db = pymysql.connect(host='localhost', user='root', password='', database='user_auth')
cursor = db.cursor()
# تسجيل مستخدم جديد
@app.route('/register', methods=['POST'])
def register():
data = request.get_json()
hashed_password = bcrypt.generate_password_hash(data['password']).decode('utf-8')
try:
cursor.execute("INSERT INTO users (username, email, password) VALUES (%s, %s, %s)",
(data['username'], data['email'], hashed_password))
db.commit()
return jsonify({"message": "User registered successfully!"}), 201
except:
return jsonify({"message": "Error: Username or email already exists"}), 400
# تسجيل الدخول وإنشاء جلسة
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
cursor.execute("SELECT * FROM users WHERE email=%s", (data['email'],))
user = cursor.fetchone()
if user and bcrypt.check_password_hash(user[3], data['password']):
access_token = create_access_token(identity=user[1])
return jsonify({"access_token": access_token}), 200
else:
return jsonify({"message": "Invalid credentials"}), 401
if __name__ == '__main__':
app.run(debug=True)
🔹 4. تحسين الأمان
✅ تشفير كلمات المرور باستخدام bcrypt.
✅ استخدام JWT لإدارة الجلسات بدلاً من ملفات تعريف الارتباط
✅ منع هجمات القوة الغاشمة عبر reCAPTCHA أو تحديد عدد المحاولات.
✅ إضافة تسجيل دخول عبر الشبكات الاجتماعية لاحقًا لتحسين تجربة المستخدم.
🔹 5. اختبار النظام
- تسجيل مستخدم جديد:
POST /register
{
"username": "mourad",
"email": "mourad@example.com",
"password": "securepassword"
}
- تسجيل الدخول:
POST /login
{
"email": "mourad@example.com",
"password": "securepassword"
}
- الحصول على رمز الجلسة (JWT):
{
"access_token": "your_generated_token"