إعادة المصادقة

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

يجب أن تطوّر التطبيقات آليتها الخاصة للتبديل بين حسابات مستخدم فيسبوك المختلفة باستخدام وظائف تسجيل الخروج وينبغي ألا تعتمد على إعادة المصادقة لهذا الغرض.

ملاحظة

لا تدعم مجموعات SDK لنظامي Android وiOS ميزة إعادة المصادقة حاليًا.

تمكين إعادة المصادقة

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

فيما يلي مثال لاستخدام مجموعة JavaScript SDK التي تؤدي إلى تشغيل ميزة إعادة المصادقة باستخدام auth_type لـ reauthenticate:

FB.login(function(response) {
  // Original FB.login code
}, { auth_type: 'reauthenticate' })

المعلمة auth_nonce

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

ستحتاج مجددًا إلى تعديل دفق تسجيل الدخول لتحديد المعلمة auth_nonce، على سبيل المثال:

FB.login(function(response) {
  // Original FB.login code
}, { auth_type: 'reauthenticate', auth_nonce: '{random-nonce}' })

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

فيما يلي مثال لاستخدام JavaScript (مع إطار عمل jQuery) وPHP كدليل يمكنك توظيفه في عملية الإعداد لديك. بالنسبة للمثال الذي نوفره، سنستخدم سلسلة برمجية مضمنة كرمز عشوائي. ويجب استبدال هذه السلسلة باستدعاء ديناميكي لرمز عشوائي تم إنشاؤه.

function checkNonce(access_token) {
  $.post('checkNonce.php', {access_token: access_token}, function(data) {
    if (data == 1) {
      console.log('The user has been successfully re-authenticated.');
      FB.api('/me', function(response) {
  console.log('Good to see you, ' + response.name + '.');
});
    } else {
      console.log('The nonce has been used before. Re-authentication failed.');
    }
  });
}

ملاحظة: يفترض ملف PHP هذا فقط، ولا يتضمن، جزء الرمز البرمجي الذي سيقارن الرمز العشوائي المتوفر مع قاعدة بيانات التطبيق. ويجب تخصيص هذا لقاعدة البيانات لديك وبيئة الرمز البرمجي:

<?php

  $access_token = $_REQUEST['access_token'];
  $graph_url = 'https://graph.facebook.com/oauth/access_token_info?'
      . 'client_id=YOUR_APP_ID&amp;access_token=' . $access_token;
  $access_token_info = json_decode(file_get_contents($graph_url));

  function nonceHasBeenUsed($auth_nonce) &#123;
      // Here you would check your database to see if the nonce
      // has been used before. For the sake of this example, we'll
      // just assume the answer is "no".
      return false;
  }

  if (nonceHasBeenUsed($access_token_info->auth_nonce) != true) {
      echo '1';
   } else {
      echo '0';
   }
?>

في هذا المثال، يتم استدعاء الوظيفة checkNonce() بلغة JavaScript بعد تلقي استجابة رمز الوصول من مربع الحوار تسجيل الدخول المرتبط بميزة إعادة المصادقة. استخدام مجموعة SDK للغة JavaScript كمثال:

FB.login(function(response) {
  if (response.authResponse) {
     // Login success, check auth_nonce...
     checkNonce(response.authResponse.access_token);
  } else {
    // User cancelled
  }
}, { auth_type: 'reauthenticate', auth_nonce: '{random-nonce}' })

لاحظ أن المعلمة auth_nonce هي جزء اختياري من إعادة المصادقة. يوصى بشدة بأن تستخدم التطبيقات هذه الميزة، وتحديدًا عند طلب reauthenticate كـ auth_type.