ما هو access token ؟
كيف يمكن التعامل معه في Django ؟
وما هي الطريقة المثالية لعمل log in بعد أن يتم المصادقة؟
أرجوا التوضيح مع الشكر
دعني أغير السؤال قليلا:
ماهو الفرق بين Session و Token؟
ببساطة كلا من Session و Token طريقتين لعمل authorize (تسجيل دخول وسماح للمستخدم بالوصول لبعض الخصائص في الموقع، مثلاً طلب المنتج للبيت لا يتم إلا بعد تسجيل الدخول).
1. استعمال الـ Session:
الطريقة بسيطة جدا، يسجل المستخدم الدخول ويتم الاحتفاظ بال cookies التي تحتوي على على الـ id الخاص بالجلسة session_id
إذا كنت عملت نظام تسجيل دخول في الجانقو أو فلاسك، فعلى الأغلب انت استعملت هذه الطريقة كونها الافتراضية
2. استعمال الـ Token:
هنا يتم الأمر بشكل مختلف، يسجل المستخدم الدخول ويعطيك السيرفر token هو لا يهتم كيف ستحتفظ بها (سواء في كوكيز أو في تطبيق أندرويد داخل ملف أو أين ما تريد)…
السيرفر فقط وقتها يهتم أنك حينما تقوم بأي طلب request مستقبلاً، يجب أن تقوم بإرفاق token في الهيدر لهذا الطلب.
الصورة توضح الفرق بينهما
مصدر الصورة: https://dzone.com/articles/cookies-vs-tokens-the-definitive-guide
لا يوجد طريقة مثلى، الأمر يعتمد تماما على ما تريد القيام به
عمل API لتطبيقات الموبايل (مثل فيسبوك وتويتر): الأفضل هنا هو token
عمل تطبيق ويب عادي: لا فرق، وربما session أسهل
عظيم
انا استعمل 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 ؟؟
مرحبا صهيب
لم أفهم سؤالك جيدا لكن يمكنك فقط عمل import لل store و استعمال البيانات في أي component تريد
هل يمكن توضح أكثر المشكل اللي حصل لك
في الكمبوننت ليس هنالك مشكلة
لكن انا اريد استخدم البيانات داخل ملف main.js
حين ما عملت import اخد القيمة الاولى لكنه حين تحديثها لا تتغير داخل main.js
اها فهمت المشكلة الآن
المشكل في كودك هو أن الدالة axios.create
تحدث مرة واحدة و تأخذ القيمة مرة واحدة في البداية فقط وليس عند كل request
لذلك بدلا من هذا يمكنك استعمال axios interceptors التي تستقبل ال request قبل ما يبعث و يمكنك هناك إضافة ال headers التي تريد كالتالي
base.interceptors.request.use((config) => {
config.headers = {'Authorization': اجلب الداتا من الستور هنا };
return config;
});
هنا مشكلتي كيف اجلب الداتا من الstore
ياخذ الtoken مرة واحدة في حال التحديث مرة اخرى لا تتغير قيمة الtoken
بنفس الطريقة التي جلبتها في دالة create لكن هاته المرة استعمل interceptor
base.interceptors.request.use((config) => {
config.headers = {'Authorization': store.state.user.Authorization };
return config;
});
مهو انا هون مشكلتي هاي الطريقة بالهشكل ما ضبطت لانه عم يعطينيي قيمة وحدة ما بتتغير.
هل استعملت interceptor؟
المشكل ليس في طريقة جلب البيانات من ال store بل في أن الدالة create تنفذ مرة واحدة فقط
تمام شكراً لك
اليوم سوف اجرب
شكرأ لك هشام لقد نجحت الطريقة التي اخبرتني بها.
العفو أخي صهيب