Docs

المصادقة

كيفية المصادقة مع API منصة مُلكم باستخدام Supabase Auth و JWT

منصة مُلكم تستخدم Supabase Auth لادارة المصادقة. كل طلب API يتطلب JWT token صالح.

الحصول على Token

تسجيل الدخول بالبريد الالكتروني

import { createClient } from '@supabase/supabase-js';
 
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);
 
const { data, error } = await supabase.auth.signInWithPassword({
  email: 'user@example.com',
  password: 'your-password',
});
 
// استخدم هذا الـ token في كل طلب
const token = data.session?.access_token;

تسجيل الدخول بـ Google OAuth

const { data, error } = await supabase.auth.signInWithOAuth({
  provider: 'google',
});

استخدام الـ Token

ارسل الـ token في header Authorization لكل طلب:

cURL:

curl -X POST \
  https://[PROJECT_REF].supabase.co/functions/v1/create-tap-charge \
  -H "Authorization: Bearer eyJhbGciOi..." \
  -H "Content-Type: application/json" \
  -d '{"amount": 100, "currency": "SAR"}'

JavaScript:

const response = await fetch(
  `${SUPABASE_URL}/functions/v1/create-tap-charge`,
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ amount: 100, currency: 'SAR' }),
  }
);
 
const result = await response.json();

Python:

import requests
 
response = requests.post(
    f"{SUPABASE_URL}/functions/v1/create-tap-charge",
    headers={
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
    },
    json={"amount": 100, "currency": "SAR"},
)
 
result = response.json()

انتهاء صلاحية الـ Token

  • مدة صلاحية Access Token: ساعة واحدة (3600 ثانية)
  • استخدم supabase.auth.refreshSession() لتجديد الـ Token
  • الـ Supabase Client SDK يتولى التجديد التلقائي

تحذير: لا تخزن الـ Token في localStorage في تطبيقات الانتاج. استخدم HttpOnly cookies او Secure Storage.

الادوار والصلاحيات

الدورالوصفالصلاحيات
merchantتاجروصول كامل لمتجره فقط
team_memberعضو فريقصلاحيات محددة حسب الدور
customerعميل المتجرعرض الطلبات والحساب الشخصي
adminمدير المنصةوصول كامل لكل المتاجر

Row Level Security (RLS)

كل البيانات محمية بـ RLS في PostgreSQL. هذا يعني:

  • التاجر يرى بيانات متجره فقط
  • العميل يرى طلباته فقط
  • لا يمكن لاي مستخدم الوصول لبيانات مستخدم آخر
  • الـ Admin فقط يملك وصول شامل
-- مثال: سياسة RLS للمنتجات
CREATE POLICY "merchants_own_products" ON products
  FOR ALL
  USING (store_id IN (
    SELECT id FROM stores WHERE owner_id = auth.uid()
  ));

On this page