بناء نظام تسجيل دخول من الصفر يمنحك تحكمًا كاملاً في الأمان والتفاعل

رائع! بناء نظام تسجيل دخول من الصفر يمنحك تحكمًا كاملاً في الأمان والتفاعل. سأساعدك بخطوات عملية لإنشاء نظام تسجيل دخول يدويًا باستخدام 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"

التعليقات مغلقة.