اذهب إلى المحتوى

السؤال

نشر (معدل)

انا اعمل على تطبيق flutter firebase ولكني واجهت مشكله عندما اقوم بتسجيل الخروج الاحظ عدم خروج المستخدم بالشكل الصحيح بمعنى عند تسجيل الخروج  من المستخدم احمد مثلا واقوم بتسجيل الدخول بالمستخدم علي بيانات احمد مازال محفوظه في التطبيق , استخدم الكود التالي ولكني مازلت اواجه نفس المشكله 

 

اقتباس
signoutMethod({context}) async{

try{

await FirebaseAuth.instance.signOut();

}catch(e){

VxToast.show(context, msg: e.toString());

}

}

 

في ملف AuthController

وفي ملف الاعدادات للمستخدم account.dart

اقتباس
OutlinedButton(

style: OutlinedButton.styleFrom(

side: BorderSide(color: whiteColor)

),

child: Text(

"Log out",

style: TextStyle(fontFamily: semibold , color: Colors.white),),

onPressed: () async{

await Get.put(AuthController()).signoutMethod(context: context);

Get.offAll(() => LoginScreen());

},

),

 

الاحظ انه يقوم بالانتقال الى loginscreen دون حذف بيانات المستخدم تحققت من كل الحزم وكلها كانت سليمه 

هل هناك يستطيع شرح ما المشكله التي تحصل معي وكيف احلها

تم التعديل في بواسطة امل_هاني

Recommended Posts

  • 0
نشر

من المفترض أن الطريقة الصحيحة لإزالة  جلسة المستخدم عند تسجيل الخروج في Flutter Firebase،هي كالتالي:

Future<void> signOut() async {
  // 1. إلغاء تسجيل الدخول من Firebase Auth
  await FirebaseAuth.instance.signOut();

  // 2. مسح بيانات المستخدم من Firebase
  await FirebaseFirestore.instance
      .collection('users')
      .doc(FirebaseAuth.currentUser!.uid)
      .delete();

  // 3. إعادة تعيين المتغيرات الخاصة بالمستخدم
  _isLoggedIn = false;
  _user = null;
}

حيث يعمل الكود على النحو التالي:

  1. أولاً، إلغاء تسجيل الدخول من Firebase Auth باستخدام FirebaseAuth.instance.signOut().
  2. بعد ذلك، مسح بيانات المستخدم من Firebase باستخدام FirebaseFirestore.instance.collection('users').doc(FirebaseAuth.currentUser!.uid).delete().
  3. ثم إعادة تعيين المتغيرات الخاصة بالمستخدم، مثل _isLoggedIn و _user.

وتستطيع استخدام الكود في ملف main.dart ووضعه في وظيفة onPressed لزر تسجيل الخروج:

// ...

class MyApp extends StatelessWidget {
  // ...

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // ...
      home: Scaffold(
        appBar: AppBar(
          title: Text('My App'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              // ...
              ElevatedButton(
                onPressed: signOut,
                child: Text('تسجيل الخروج'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // ...

  Future<void> signOut() async {
    // 1. إلغاء تسجيل الدخول من Firebase Auth
    await FirebaseAuth.instance.signOut();

    // 2. مسح بيانات المستخدم من Firebase
    await FirebaseFirestore.instance
        .collection('users')
        .doc(FirebaseAuth.currentUser!.uid)
        .delete();

    // 3. إعادة تعيين المتغيرات الخاصة بالمستخدم
    _isLoggedIn = false;
    _user = null;

    // 4. إظهار رسالة للمستخدم
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text('تم تسجيل الخروج بنجاح'),
      ),
    );
  }
}

وعندما يضغط المستخدم على زر تسجيل الخروج، سيتم إلغاء تسجيل الدخول من Firebase Auth ثم مسح بيانات المستخدم من Firebase، بالإضافة إلى  إعادة تعيين المتغيرات الخاصة بالمستخدم، مما يشير إلى أن المستخدم غير مسجل الدخول.

 

  • 0
نشر
بتاريخ On 27‏/9‏/2023 at 12:40 قال Mustafa Suleiman:

من المفترض أن الطريقة الصحيحة لإزالة  جلسة المستخدم عند تسجيل الخروج في Flutter Firebase،هي كالتالي:

Future<void> signOut() async {
  // 1. إلغاء تسجيل الدخول من Firebase Auth
  await FirebaseAuth.instance.signOut();

  // 2. مسح بيانات المستخدم من Firebase
  await FirebaseFirestore.instance
      .collection('users')
      .doc(FirebaseAuth.currentUser!.uid)
      .delete();

  // 3. إعادة تعيين المتغيرات الخاصة بالمستخدم
  _isLoggedIn = false;
  _user = null;
}

حيث يعمل الكود على النحو التالي:

  1. أولاً، إلغاء تسجيل الدخول من Firebase Auth باستخدام FirebaseAuth.instance.signOut().
  2. بعد ذلك، مسح بيانات المستخدم من Firebase باستخدام FirebaseFirestore.instance.collection('users').doc(FirebaseAuth.currentUser!.uid).delete().
  3. ثم إعادة تعيين المتغيرات الخاصة بالمستخدم، مثل _isLoggedIn و _user.

وتستطيع استخدام الكود في ملف main.dart ووضعه في وظيفة onPressed لزر تسجيل الخروج:

// ...

class MyApp extends StatelessWidget {
  // ...

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // ...
      home: Scaffold(
        appBar: AppBar(
          title: Text('My App'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              // ...
              ElevatedButton(
                onPressed: signOut,
                child: Text('تسجيل الخروج'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // ...

  Future<void> signOut() async {
    // 1. إلغاء تسجيل الدخول من Firebase Auth
    await FirebaseAuth.instance.signOut();

    // 2. مسح بيانات المستخدم من Firebase
    await FirebaseFirestore.instance
        .collection('users')
        .doc(FirebaseAuth.currentUser!.uid)
        .delete();

    // 3. إعادة تعيين المتغيرات الخاصة بالمستخدم
    _isLoggedIn = false;
    _user = null;

    // 4. إظهار رسالة للمستخدم
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text('تم تسجيل الخروج بنجاح'),
      ),
    );
  }
}

وعندما يضغط المستخدم على زر تسجيل الخروج، سيتم إلغاء تسجيل الدخول من Firebase Auth ثم مسح بيانات المستخدم من Firebase، بالإضافة إلى  إعادة تعيين المتغيرات الخاصة بالمستخدم، مما يشير إلى أن المستخدم غير مسجل الدخول.

 

 

اخي Mustafa Suleiman انا لا اريد ان اقوم بمسح بيانات المستخدم نهائيا من الفايبربيس , كل ما اريد هو انهاء جلسه من التطبيق عندما يقوم بتسجيل الخروج لا تتبقى بياناته محفوظه بحيث اذا سجل المستخدم الاخر لا تظهر بيانات المستخدم الاول 

المشكله التي اواجهها مثلا 

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...