microdot.auth --- مصادقة HTTP¶
مزخرفات (decorators) تحمي المسارات خلف مصادقة HTTP. بنكهتين: BasicAuth لمخطط Authorization: Basic <base64> الذي تطالب به المتصفحات أصلاً، و TokenAuth لمخطط Authorization: Bearer <token> الذي تستخدمه واجهات API.
يشتق كلا الصنفين من قاعدة مشتركة BaseAuth؛ يبني التطبيق كائن المصادقة، ويسجل دالة رد نداء للمصادقة عبر authenticate()، ثم يزخرف المسارات المحمية بنسخة المصادقة.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
مصادقة HTTP الأساسية. ينبثق المتصفح بمربع حوار لاسم المستخدم / كلمة المرور عندما يصل طلب غير مُصادق عليه إلى مسار محمي، ويرسل
Authorization: Basic <base64(user:pass)>في الطلبات اللاحقة.- realm
سلسلة المجال (realm) التي يعرضها المتصفح بجوار المطالبة.
- charset
مجموعة المحارف المُعلَن عنها في تحدي
WWW-Authenticate.- scheme
اسم مخطط المصادقة. الافتراضي
'Basic'.- error_status
حالة HTTP المُرجعة عند فشل المصادقة. الافتراضي 401.
- authenticate(f)¶
مزخرف يسجل التحقق من بيانات الاعتماد. يأخذ f
(request, username, password)ويُرجع كائن المستخدم المُصادق عليه (أوNoneعند بيانات اعتماد خاطئة). يُخزَّن الكائن المُرجَع فيrequest.g.current_user.basic = BasicAuth(realm='Camera') @basic.authenticate async def check(request, username, password): user = users.get(username) if user and user.check_password(password): return user
- __call__(f)¶
زخرفة مسار بنسخة
BasicAuthتحميه:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
مثل
__call__()، لكنه لا يرفض الطلبات التي تفتقر إلى بيانات الاعتماد -- يظل المعالج يعمل، مع تعيينrequest.g.current_userإما إلى المستخدم المُصادق عليه أو إلىNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
مصادقة برمز Bearer. يرسل العملاء رمزاً في ترويسة
Authorization؛ ويتحقق التطبيق منه مقابل أي مخزن داعم يفضله.- header
اسم الترويسة الحاملة للرمز. يتوقع الافتراضي
'Authorization'القيمةBearer <token>؛ بينما تحمل ترويسة مخصصة قيمة الرمز مباشرة.- scheme
مخطط المصادقة لترويسة
Authorization. الافتراضي'Bearer'.- error_status
حالة HTTP عند فشل المصادقة. الافتراضي 401.
- authenticate(f)¶
مزخرف يسجل التحقق من الرمز. يأخذ f
(request, token)ويُرجع كائن مستخدم أوNoneimport jwt tokens = TokenAuth() @tokens.authenticate async def check(request, token): try: claims = jwt.decode(token, SECRET) except jwt.exceptions.PyJWTError: return None return claims['sub']
- errorhandler(f)¶
مزخرف يتجاوز استجابة 401 الافتراضية. يأخذ f كائن الطلب ويُرجع استجابة (أو يُجهض).
- __call__(f: Callable) Callable¶
زخرفة مسار بنسخة
TokenAuthتحميه. تُرفض الطلبات التي لا تحمل رمزاً صالحاً (401 افتراضياً، أو أياً كان ما أرجعهerrorhandler()). عند النجاح يكون المستخدم المُصادق عليه علىrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
يُرجع المعالج المُغلَّف.
- optional(f: Callable) Callable¶
مثل
__call__()، لكنه لا يرفض الطلبات التي تفتقر إلى رمز -- يظل المعالج يعمل، مع تعيينrequest.g.current_userإما إلى المستخدم المُصادق عليه أو إلىNone. مفيد للمسارات التي تغير مخرجاتها بناءً على ما إذا كان المستدعي مُصادقاً عليه دون اشتراط ذلك:@app.get('/api/feed') @tokens.optional async def feed(request): if request.g.current_user: return personalized_feed(request.g.current_user) return public_feed()
يُرجع المعالج المُغلَّف.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
قاعدة مشتركة لـ
BasicAuthوTokenAuth. يمكن لمخططات المصادقة المخصصة أن تشتق منها.- auth_callback: Callable | None¶
دالة رد النداء المسجلة عبر
authenticate. تكونNoneحتى يسجل التطبيق دالة رد النداء (زخرفة دالة بـ@auth.authenticateهي ما يضبطها).
- error_callback: Callable¶
كائن قابل للاستدعاء غير متزامن يُرجع الاستجابة المُرسلة عند فشل المصادقة. يضبطه المُنشئ على افتراضي يُرجع استجابة 401؛ استبدله عبر
errorhandlerعلىTokenAuth، أو مباشرة على صنف فرعي مخصص منBaseAuth.
تحصل المسارات المزخرفة على request.g.current_user معبأ بالقيمة المُرجعة من دالة رد نداء المصادقة. داخل المسار، افحص تلك السمة لتحديد هوية المستدعي.