كيف أغير الواجهة في vue حسب الحالة (مسجل دخول / غير مسجل)؟

اريد أن اعرف ما هي الطريقة المتبعة هنا حين يتم تسجيل الدخول تذهب تسجيل الدخول وتظهر الصف الدراسي،
هل هي عن طريق v-if
أم كمبوننت خاص يتم التحويل بينهم؟
ومتى يتم جلب البانات الخاصة بالمستخدم
created ???

2 Likes

الـ vue directives أسرع بكثير
لذلك v-if, v-else يستخدمان في مواضع مثل المثال المذكور

داخل الكومبوننت يمكنك وضع Boolean variable مثلا:

export default {
   data () {
     isLogged: false;
   }
}

يمكنك التلاعب بالمتغير من الباك اند، الدالة المسؤولة عن تسجيل الدخول تكون promise function
اذا نجحت العملية يمكنك تغيير قيمة المتغير… سأستخدم نموذج مما طبقت من قاعدة بيانات firebase:

methods: {
   firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(() => {
   // يمكنك هنا قلب المتغير
    this.isLogged: true
   })
  .catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});
}

الآن يمكنك التحكم في اظهار واخفاء أي عنصر عن طريق استخدام v-if معتمدة على قيمة isLogged

4 Likes

كما أشار @sniperadmin

ببساطة بمجرد تسجيل العضو والتأكد من بياناته يتم تخزين حالته من خلال الـ Vuex تحت state بمسمى isLogin مثلاً.

فعندما يكون مسجل دخول هذه الـ state تكون قيمتها true وعندما يكون غير مسجل للدخول تكون قيمتها false

الأن تستطيع بإستخدام هذه الـ state إظهار او اخفاء أي عناصر بإستخدام الـ v-if, v-else وتستطيع أيضاً إضافة الـ Navigation Guards التي من خلالها ستحدد إذا ما كان العضو مسجل ولدية صلاحية للوصول إلى الكلاس روم ام لا.

ومتى يتم جلب البانات الخاصة بالمستخدم
created ???

بمجرد ضغط المستخدم على زر “تسجيل الدخول” والتأكد من بياناته سيتم تخزين حالته وبياناته بالـVuex ومن ثم بإمكانك إستخدامها أين ما شئت في أي مكان بإستدعائها بالـ getters لذا ليس عليك ان تقوم بعمل طلب للـ api في كل مرة لإحضار بيانات العضو ولكن ستقوم بذلك مرة واحدة عند تسجيلة للدخول.

4 Likes

تمام انا عملت بالضبط مثل مو ذاكر والامور تمام

لكن يوجد مشكلة انه كل ما اقوم بتحديث الصفحة يتم حذف باينات vue x وبالتالي يحتاج المستخدم لتسجيل دخول من جديد
انا استخدم cookies لكن كيف احفظ قيمة من الكوكيز ألى vuex مع كل تحديث يعني اريد أن يقوم vue x بتخزين البيانات من cookies
وحين حاولت ان أخزن

x : this.$cookies.get('isLogin ')
تواجهني مشكلة انه ياخذ القيمة الأولى ومن ثم لا يساجيب بعدها
1 Like

أشرح لي التطبيق الذي تعمل عليه وكذلك جيب لي رابط المستودع أطلع عليه. علشان يكون ردي مساعد لك على تجاوز المشكلة التي تواجهها

1 Like

هو عبارة عن مشروع اتعلم به على المهارات التي تعلمتها من ناحية ومن ناحية اخرة هو برنامج محاسبة احوله لويب ابلكيشن
ارجوا الطلاع على التفاصيل واعطني ملاحظاتك

1 Like

@Alhakem
أنتظر ملاحظاتك

2 Likes

لم أجرب الكود عندي صراحة لكن على ما يبدو، يجب ان تحتفظ بالـcookies داخل الـstore ، منطقي لأن ميكانيكا الAuthentication تتم داخل الـstore

تفقد هذا الكود ويمكنك الاقتباس منه (مشروع open source):

3 Likes

شكرأ جزيلاً
لقد نجحت
لقد قمت بتخزين الكوكز داخل الستور وتمت العملية بنجاح.
:rose::rose::rose::rose::rose::rose::rose::rose::rose::rose:

3 Likes

أبشر بالخير :tada:

بعض الأشياء تكون في ذاتها Logic، أو يكون في طياتها منطق ورؤية، لذلك البرمجة بالخطوات وحدها لن تكفي :slight_smile:
السر وراء فقدان المستخدم صلاحيات الدخول هو عدم تخزين الـAccess Token، والتي ربما تم زرعها في كومبوننت مستقل خارج الstore
مما يخلق فجوة (بمجرد التسجيل تتولد الرخصة لكن تطير)

أعتقد أنه يمكن حفظ الtoken داخل كومبوننت لكن لم أجربها، وأيضا من حيث الأمان (الtoken لا تظهر للمستخدم في المتصفح في حالة استخدام vuex)

**هذا المقال ** يوضح كيفية اختراق الaccess token لفيس بوك، والتي اكتشفها مهندس الاختراق المصري Ahmed Elsobky,،
وينصح بتشفير الـrequests ببروتوكول HTTPS على أقل تقدير

الآن أحاول البحث عن المزيد في أمن المعلومات بخصوص هذا الشأن، وأنا على يقين أن أساتذتنا يستطيعون توفير بعض الـtips & tricks في المستقبل :slight_smile:
Happy Coding!

3 Likes