المصادقة باستخدام Yahoo على Android

يمكنك السماح للمستخدمين بالمصادقة مع Firebase باستخدام موفري OAuth مثل Yahoo من خلال دمج تسجيل دخول OAuth العام المستند إلى الويب في تطبيقك باستخدام Firebase SDK لتنفيذ تدفق تسجيل الدخول من البداية إلى النهاية.

قبل ان تبدأ

لتسجيل دخول المستخدمين باستخدام حسابات Yahoo ، يجب أولاً تمكين Yahoo كموفر تسجيل دخول لمشروع Firebase الخاص بك:

  1. إضافة Firebase إلى مشروع Android .

  2. في وحدة التحكم Firebase ، فتح الباب أصيل.
  3. على علامة التبويب تسجيل الدخول الأسلوب، تمكين مزود ياهو.
  4. إضافة معرف العميل والعميل السري من وحدة التحكم المطور الذي موفر لتكوين الموفر:
    1. تسجيل العميل ياهو أوث، اتبع ثائق المطور ياهو على تسجيل تطبيق ويب مع ياهو .

      تأكد من تحديد أذونات API رض الاتصال هما: profile و email .

    2. عند تسجيل التطبيقات مع مقدمي هذه، تأكد من تسجيل *.firebaseapp.com مجال للمشروع الخاص بك كما المجال إعادة توجيه للتطبيق.
  5. انقر فوق حفظ.
  6. إذا كنت لم تحدد بعد التطبيق الخاص بك بصمة SHA-1، بذلك من صفحة إعدادات وحدة التحكم Firebase. الرجوع إلى تصديق عميلك للحصول على تفاصيل حول كيفية الحصول على التطبيق الخاص بك بصمة SHA-1.

تعامل مع تدفق تسجيل الدخول باستخدام Firebase SDK

إذا كنت تقوم بإنشاء تطبيق Android ، فإن أسهل طريقة لمصادقة المستخدمين باستخدام Firebase باستخدام حسابات Yahoo الخاصة بهم هي التعامل مع تدفق تسجيل الدخول بالكامل باستخدام Firebase Android SDK.

للتعامل مع تدفق تسجيل الدخول باستخدام Firebase Android SDK ، اتبع الخطوات التالية:

  1. بناء مثيل OAuthProvider باستخدام بناء مع معرف مزود yahoo.com.

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");
    
  2. اختياري: حدد معلمات إضافية أوث المخصصة التي تريد إرسالها مع طلب أوث.

    // Prompt user to re-authenticate to Yahoo.
    provider.addCustomParameter("prompt", "login");
    
    // Localize to French.
    provider.addCustomParameter("language", "fr");
    

    لدعم المعلمات ياهو، راجع وثائق ياهو أوث . ملاحظة أنه لا يمكنك تمرير المعلمات المطلوبة Firebase مع setCustomParameters() . هذه المعلمات CLIENT_ID، redirect_uri، RESPONSE_TYPE ونطاقها والدولة.

  3. اختياري: حدد أوث إضافية نطاقات 2.0 وراء profile و email الذي تريد طلب من مزود المصادقة. إذا كان التطبيق الخاص بك يتطلب الوصول إلى بيانات المستخدم خاصة من ياهو واجهات برمجة التطبيقات، ستحتاج إلى طلب أذونات إلى Yahoo اجهات برمجة التطبيقات API تحت ضوابط في وحدة تحكم مطور ياهو. يجب أن تكون نطاقات OAuth المطلوبة مطابقة تامة للنطاقات المكونة مسبقًا في أذونات واجهة برمجة التطبيقات للتطبيق. على سبيل المثال إذا، قراءة / يطلب حق الكتابة إلى جهات الاتصال المستخدم ومعدة و مكونة مسبقا في أذونات API التطبيق، sdct-w ديه لتمريرها بدلا من قراءة فقط نطاق أوث sdct-r . خلاف ذلك ، سوف يفشل التدفق وسيظهر خطأ للمستخدم النهائي.

    List<String> scopes =
        new ArrayList<String>() {
          {
            // Request access to Yahoo Mail API.
            add("mail-r");
            // This must be preconfigured in the app's API permissions.
            add("sdct-w");
          }
        };
    provider.setScopes(scopes);
    

    لمعرفة المزيد، يرجى الرجوع إلى وثائق ياهو نطاقات .

  4. مصادقة مع Firebase باستخدام كائن موفر OAuth. علما بأن خلافا لعمليات FirebaseAuth أخرى، وهذا سوف السيطرة على واجهة المستخدم الخاص بك عن طريق ظهرت على تبويب كروم مخصص . نتيجةً لذلك ، لا تشر إلى نشاطك في OnSuccessListeners و OnFailureListeners التي قمت بإرفاقها حيث سيتم فصلها فورًا عند بدء العملية لواجهة المستخدم.

    يجب عليك أولاً التحقق مما إذا كنت قد تلقيت ردًا بالفعل. يؤدي تسجيل الدخول عبر هذه الطريقة إلى وضع نشاطك في الخلفية ، مما يعني أنه يمكن للنظام استعادته أثناء تدفق تسجيل الدخول. للتأكد من عدم قيام المستخدم بالمحاولة مرة أخرى في حالة حدوث ذلك ، يجب عليك التحقق مما إذا كانت النتيجة موجودة بالفعل.

    للتحقق مما إذا كان هناك نتيجة المعلقة، استدعاء getPendingAuthResult :

    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // Yahoo OAuth ID token can be retrieved:
                  // authResult.getCredential().getIdToken().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    لبدء تسجيل الدخول التدفق، وندعو startActivityForSignInWithProvider :

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    على الانتهاء بنجاح، والحصول أوث رمز المرتبطة مزود يمكن استرجاعها من OAuthCredential الكائن عاد.

    باستخدام رمز وصول أوث، يمكنك استدعاء API ياهو .

    حيث YAHOO_USER_UID غير معرف المستخدم ياهو والتي يمكن تحليلها من firebaseAuth.getCurrentUser().getProviderData().get(0).getUid() الحقل أو من authResult.getAdditionalUserInfo().getProfile() .

  5. وبينما تركز الأمثلة المذكورة أعلاه على تدفقات تسجيل الدخول ل، لديك أيضا القدرة على ربط مزود Yahoo إلى مستخدم موجود باستخدام startActivityForLinkWithProvider . على سبيل المثال ، يمكنك ربط عدة موفرين لنفس المستخدم مما يسمح لهم بتسجيل الدخول باستخدام أي منهما.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // Yahoo credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
  6. على نفس النمط يمكن استخدامها مع startActivityForReauthenticateWithProvider والتي يمكن استخدامها لاسترداد أوراق اعتماد جديدة لعمليات الحساسة التي تتطلب تسجيل الدخول مؤخرا.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

الخطوات التالية

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

  • في التطبيقات الخاصة بك، يمكنك الحصول على المعلومات الشخصية الأساسية للمستخدم من FirebaseUser الكائن. انظر إدارة المستخدمين .

  • في قاعدة البيانات الخاصة بك Firebase الحقيقي وسحابة التخزين قواعد الأمن ، يمكنك الحصول على قعت في هوية المستخدم الفريد المستخدم من auth متغير، واستخدامها للسيطرة على ما هي البيانات على وصول ويمكن للمستخدم.

يمكنك السماح للمستخدمين تسجيل الدخول إلى التطبيق الخاص بك باستخدام موفري المصادقة متعددة عن طريق ربط المصادقة أوراق اعتماد مقدم إلى حساب مستخدم موجود.

تسجيل الخروج مستخدم، استدعاء signOut :

جافا

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()