ما هو الـ access token؟

ما هو access token ؟
كيف يمكن التعامل معه في Django ؟
وما هي الطريقة المثالية لعمل log in بعد أن يتم المصادقة؟
أرجوا التوضيح مع الشكر

4 Likes

@YaserAlnajjar

2 Likes

دعني أغير السؤال قليلا:

ماهو الفرق بين Session و Token؟

ببساطة كلا من Session و Token طريقتين لعمل authorize (تسجيل دخول وسماح للمستخدم بالوصول لبعض الخصائص في الموقع، مثلاً طلب المنتج للبيت لا يتم إلا بعد تسجيل الدخول).

1. استعمال الـ Session:

الطريقة بسيطة جدا، يسجل المستخدم الدخول ويتم الاحتفاظ بال cookies التي تحتوي على على الـ id الخاص بالجلسة session_id

إذا كنت عملت نظام تسجيل دخول في الجانقو أو فلاسك، فعلى الأغلب انت استعملت هذه الطريقة كونها الافتراضية :smile:

2. استعمال الـ Token:

هنا يتم الأمر بشكل مختلف، يسجل المستخدم الدخول ويعطيك السيرفر token هو لا يهتم كيف ستحتفظ بها (سواء في كوكيز أو في تطبيق أندرويد داخل ملف أو أين ما تريد)…

السيرفر فقط وقتها يهتم أنك حينما تقوم بأي طلب request مستقبلاً، يجب أن تقوم بإرفاق token في الهيدر لهذا الطلب.

الصورة توضح الفرق بينهما


مصدر الصورة: https://dzone.com/articles/cookies-vs-tokens-the-definitive-guide

لا يوجد طريقة مثلى، الأمر يعتمد تماما على ما تريد القيام به

عمل API لتطبيقات الموبايل (مثل فيسبوك وتويتر): الأفضل هنا هو token

عمل تطبيق ويب عادي: لا فرق، وربما session أسهل

5 Likes

عظيم
انا استعمل Api واستخدم token

main.js
--------------------

var base = axios.create({
  baseURL: 'http://127.0.0.1:8000/',
  headers: {'Authorization':'Token '+ store.state.user.Authorization}

لدي مشكلة هي أنه لا يستقبل من ال store ضمن ال main.js

كيف يمكن ان استقبل من ال store ضمن main.js ؟؟

2 Likes

مرحبا صهيب
لم أفهم سؤالك جيدا لكن يمكنك فقط عمل import لل store و استعمال البيانات في أي component تريد

هل يمكن توضح أكثر المشكل اللي حصل لك

2 Likes

في الكمبوننت ليس هنالك مشكلة
لكن انا اريد استخدم البيانات داخل ملف main.js
حين ما عملت import اخد القيمة الاولى لكنه حين تحديثها لا تتغير داخل main.js

2 Likes

اها فهمت المشكلة الآن

المشكل في كودك هو أن الدالة axios.create تحدث مرة واحدة و تأخذ القيمة مرة واحدة في البداية فقط وليس عند كل request

لذلك بدلا من هذا يمكنك استعمال axios interceptors التي تستقبل ال request قبل ما يبعث و يمكنك هناك إضافة ال headers التي تريد كالتالي

 base.interceptors.request.use((config) => {
 config.headers = {'Authorization': اجلب الداتا من الستور هنا };
 return config;
});

1 Like

هنا مشكلتي كيف اجلب الداتا من الstore
ياخذ الtoken مرة واحدة في حال التحديث مرة اخرى لا تتغير قيمة الtoken

1 Like

بنفس الطريقة التي جلبتها في دالة create لكن هاته المرة استعمل interceptor

base.interceptors.request.use((config) => {
 config.headers = {'Authorization': store.state.user.Authorization };
 return config; 
});

1 Like

مهو انا هون مشكلتي هاي الطريقة بالهشكل ما ضبطت لانه عم يعطينيي قيمة وحدة ما بتتغير.

2 Likes

هل استعملت interceptor؟

المشكل ليس في طريقة جلب البيانات من ال store بل في أن الدالة create تنفذ مرة واحدة فقط

2 Likes

تمام شكراً لك
اليوم سوف اجرب

1 Like

شكرأ لك هشام لقد نجحت الطريقة التي اخبرتني بها.
:rose::rose::rose::rose::tulip:

3 Likes

العفو أخي صهيب :grin:

3 Likes