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

تأكيد رقم هاتف المستخدم في Firebase باستخدام otp - sms بدون إنشاء مستخدم جديد في تطبيق فلاتر Flutter

Flutter Dev

السؤال

اذا كنت ارغب بالحصول على رمز التفعيل من الفايربيز من خلال sms واتحقق ان رقم الهاتف صحيح ولكن بعد التحقق لا ارغب بتخزين او حفظ رقم الهاتف على الفايربيز في قائمة التوثيق او الحسابات التي تم توثيقها هل يمكن فعل ذلك؟

بمعنى انا فقط،محتاج الى رسالة التفعيل والتحقق ولكن بدون حفظ للبيانات لدي هل يمكن فعل ذلك؟ اذا نعم ياليت شرح الطريقه 

للغة البرمجة Flutter

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ 3 ساعات قال مروان مروان3:

لم افهم سولك عدل اخوي ولكن انا مسبقا اقوم بعملية تسجيل الدخول بواسطة حساب جوجل بمعنى انا لدي توثيق سابقا وتم تخزين البيانات مسبقا والحصول على Uid للمستخدم 

ولكن لاحقا اقوم بطلب استكمال بيانات المستخدم بحيث انني اقوم بطلب منه ادخال رقم هاتفه واقوم بتحقق منه هنا تحدث المشكله بحيث انني لا ارغب بتخزين رقم الهاتف انا سبق وقمت بتخزين الايميل وهذا كافي حتى لا احصل على معرفين Uid

المشكله انني الان احصل على Uid مختلفين واحد لرقم الهاتف وثاني خاص ب الايميل

إن حفظ رقم الهاتف في قاعدة البيانات يمنع تكراره لمستخدم آخر إن كان هذا الأمر يهمك.

ضمن دالة verified Success قم بتغيير الشيفرة المسؤولة عن إعادة تسجيل الدخول التلقائي التي ستتم مجدداً عن طريق الرقم، أي فقط دع جزء حفظ الرقم في قاعدة البيانات، وللتحقق لاحقاً من تسجيل هذا المستخدم وأنه قد عمل تحقق لرقم الهاتف، حينها يتوجب عليك فقط التأكد هل هذا المستخدم لديه رقم هاتف أم لا (متحقق منه أم لا) إن كان لديه رقم هاتف فهوم قد عمل تحقق وإلا لا يتحقق من رقمه.

أي بالمختصر لا تقم باستدعاء أي شيفرة مسؤولة عن تسجيل الدخول لأنها تؤدي لتشكيل id جديد وأنت لاتحتاجه

أعتقد لديك بعد التحقق من رقم الهاتف، يتم تسجيل الخروج من الحساب الحالي، وتسجيل الدخول بحساب جديد للرقم المتحقق منه

verificationCompleted: verifiedSuccess,

verifiedSuccess هي الدالة التي تستدعيها عند اكتمال التحقق لأن الشيفرة التابعة لها تقوم بتسجيل الدخول و دالة تسجيل الدخول ستكون بهذا الشكل / الاسم 

signInWithPhoneAuthCredential(credential);
FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationCompleted: (PhoneAuthCredential credential) async {

    await auth.signInWithCredential(credential);       // لانرديها
  },
);

توثيق: firebase.flutter.dev/docs/auth/phone

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 15 دقائق مضت قال Wael Aljamal:

ماهي بيانات المستخدم التي تستعملها للتعرف عليه؟

لم افهم سولك عدل اخوي ولكن انا مسبقا اقوم بعملية تسجيل الدخول بواسطة حساب جوجل بمعنى انا لدي توثيق سابقا وتم تخزين البيانات مسبقا والحصول على Uid للمستخدم 

ولكن لاحقا اقوم بطلب استكمال بيانات المستخدم بحيث انني اقوم بطلب منه ادخال رقم هاتفه واقوم بتحقق منه هنا تحدث المشكله بحيث انني لا ارغب بتخزين رقم الهاتف انا سبق وقمت بتخزين الايميل وهذا كافي حتى لا احصل على معرفين Uid

المشكله انني الان احصل على Uid مختلفين واحد لرقم الهاتف وثاني خاص ب الايميل

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 18 ساعات قال Wael Aljamal:

إن حفظ رقم الهاتف في قاعدة البيانات يمنع تكراره لمستخدم آخر إن كان هذا الأمر يهمك.

ضمن دالة verified Success قم بتغيير الشيفرة المسؤولة عن إعادة تسجيل الدخول التلقائي التي ستتم مجدداً عن طريق الرقم، أي فقط دع جزء حفظ الرقم في قاعدة البيانات، وللتحقق لاحقاً من تسجيل هذا المستخدم وأنه قد عمل تحقق لرقم الهاتف، حينها يتوجب عليك فقط التأكد هل هذا المستخدم لديه رقم هاتف أم لا (متحقق منه أم لا) إن كان لديه رقم هاتف فهوم قد عمل تحقق وإلا لا يتحقق من رقمه.

أي بالمختصر لا تقم باستدعاء أي شيفرة مسؤولة عن تسجيل الدخول لأنها تؤدي لتشكيل id جديد وأنت لاتحتاجه

أعتقد لديك بعد التحقق من رقم الهاتف، يتم تسجيل الخروج من الحساب الحالي، وتسجيل الدخول بحساب جديد للرقم المتحقق منه


verificationCompleted: verifiedSuccess,

verifiedSuccess هي الدالة التي تستدعيها عند اكتمال التحقق لأن الشيفرة التابعة لها تقوم بتسجيل الدخول و دالة تسجيل الدخول ستكون بهذا الشكل / الاسم 


signInWithPhoneAuthCredential(credential);

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationCompleted: (PhoneAuthCredential credential) async {

    await auth.signInWithCredential(credential);       // لانرديها
  },
);

توثيق: firebase.flutter.dev/docs/auth/phone

حاولت تطبيقه هنا اخي هذا الكود الذي لدي قمت بتغيره وتعديل كثيرا ولكن لم ينجح الامر

final FirebaseAuth _auth = FirebaseAuth.instance;
  void signInWithPhoneAuthCredential(PhoneAuthCredential phoneAuthCredential) async {
    setState(() {
      showLoading = true;
    });

    try {
      final authCredential = await _auth.signInWithCredential(phoneAuthCredential);

      setState(() {
        showLoading = false;
      });

      if (authCredential?.user != null) {

print('Go to other page ok');
      }
    } on FirebaseAuthException catch (e) {
      setState(() {
        showLoading = false;
      });
      print(e.message);
    }
  }


  @override
  Widget build(BuildContext context) {

    return    MaterialApp(
    home: Scaffold(
      body: Center(
        child: SingleChildScrollView(
          child: Container(
            child: Column(

              children: [


                Container(

                  padding: const EdgeInsets.all(16.0),

                  child: Column(

                    children: [

                      Row(
                        children: [
                          Expanded(
                            child: PinEntryTextField(

                              fields: 6,
                              onSubmit: (text) {
                                smsOTP = text as String;
                              },
                            ),
                          ),
                        ],
                      ),

                      GestureDetector(
                        onTap: () {
                          verifyOtp();
                        },
                        child: Container(
                          margin: const EdgeInsets.all(8),
                          height: 45,
                          width: double.infinity,
                          decoration: BoxDecoration(
                            color:     CustomColors.Background,
                            borderRadius: BorderRadius.circular(0),
                          ),
                          alignment: Alignment.center,
                          child:  Text('Check'),

                        ),
                      ),
                    ],
                  ),
                )
              ],
            ),
          ),
        ),
      ),
    ),
    );
  }


  Future<void> generateOtp(String contact) async {
    final PhoneCodeSent smsOTPSent = (String verId, [int forceCodeResend]) {
      verificationId = verId;
    };
    try {
      await _auth.verifyPhoneNumber(
          phoneNumber: contact,
          codeAutoRetrievalTimeout: (String verId) {
            verificationId = verId;
          },
          codeSent: smsOTPSent,
          timeout: const Duration(seconds: 60),
          verificationCompleted: (AuthCredential phoneAuthCredential) {},
          verificationFailed: (exception) {
            print(exception);

          });
    } catch (e) {
      handleError(e as PlatformException);

    }
  }

  
  Future<void> verifyOtp() async {
    if (smsOTP == null || smsOTP == '') {
      print('please enter 6 digit otp');
      return;
    }
    try {

      final AuthCredential credential = PhoneAuthProvider.credential(
        verificationId: verificationId,
        smsCode: smsOTP,
      );
      signInWithPhoneAuthCredential(credential);

    } catch (e) {
      handleError(e as PlatformException);
    } }

  void handleError(PlatformException error) {
    switch (error.code) {
      case 'ERROR_INVALID_VERIFICATION_CODE':
        FocusScope.of(context).requestFocus(FocusNode());
        setState(() {
          errorMessage = 'Invalid Code';
        });
        print('error');
        break;
      default:
        print('error');
        break;
    }
  }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 15 دقائق مضت قال مروان مروان3:

;(signInWithPhoneAuthCredential(credential

جاول تعليق السطر التالي..

يمكنك محاولة إضافة رقم الهاتف لمستخدم مسجل بالفعل، الطريقة كما في التوثيق: 

فلاتر: ربط حساب المستخدم في فلاتر

أندرويد: ربط رقم الهاتف مع مستخدم مسجل بالفعل

يتم ذلك من خلال الدالة :

linkWithCredential

تحوي كل من غوغل - وفيسبوك - والايميل، تابع الشيفرة ومرر القيمة المسجل بها المستخدم وأضف الرقم للحساب بدون إنشاء جديد.

إن لم تعمل هذه الطريقة لاحقاً، لماذا لا تستعمل التحقق من البريد الالكتروني؟ أو تسجيل المستخدم مباشرة عن طريق رقم الهاتف

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...