دروبال:تخصيص سير عمل تسجيل المستخدم للتواصل مع تطبيق ويب آخر

StackOverflow https://stackoverflow.com/questions/2119005

  •  22-09-2019
  •  | 
  •  

سؤال

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

لقد بدأت في ترميز تنفيذ وحدة صغيرة hook_user (http://api.drupal.org/api/function/hook_user/6)، ولكنني لا أزال أتساءل عن عدة أسئلة تتعلق بهذا الخطاف:

1) لا يمكنني العثور على مستند بخصوص $account الحقول، وبالتالي لا أعرف كيفية استرداد اسم المستخدم وكلمة المرور.
2) ال insert تُعلم العملية أنه "جارٍ إضافة حساب المستخدم".هل يتم تشغيل ذلك عندما يستعلم المستخدم عن حساب أو عندما تتم الموافقة على إنشاء حسابه المعلق؟
3) تتم إدارة المستخدم على تطبيق الويب "التابع" من خلال واجهة URL.أنا أعرف فقط header("Location: http://webapp/users/add?user=martin&pwd=bla") PHP بدائي، لكنني أخشى أن يؤدي هذا إلى إعادة التوجيه، بدلاً من مجرد الوصول إلى الصفحة المستهدفة ومواصلة تدفق التعليمات البرمجية.أي اقتراح؟

ربما قام البعض منكم ببرمجة مثل هذه الوحدة بالفعل، أو قد يكون لديه روابط لمزيد من الوثائق؟
شكرا لك مقدما،
مارتن

هل كانت مفيدة؟

المحلول 4

هنا هو الجزء الأخير من الكود الذي يعمل. لاحظ أنه يتم استرداد كلمة المرور MD5Ipted ، لذلك يجب أن يكون WebApp العبيد قادرًا على القيام بذلك أيضًا:

function mirror_registration_user($op, &$edit, &$account, $category = NULL) {
 $cmd = 'http://www.example.com/register?name='.$account->name.'&pass='.$account->pass;

 if($op == 'insert'){
$cmd .= '&op=insert';
drupal_http_request( $cmd );
 }
 else if($op == 'delete'){
$cmd .= '&op=delete';
drupal_http_request( $cmd );
 }
 else if($op == 'after_update'){ // 'update' is a "before update event"
$cmd .= '&op=update';
drupal_http_request( $cmd );
 }
}

ملاحظة: في حالتنا ، يتطلب التسجيل موافقة المسؤول. في هذه الحالة ، هناك حدث "تحديث". يتم تشغيل حدث "إدراج" بمجرد استفسار المستخدم من حساب.

معلومات عن المبتدئين الآخرين:

  • عند محاولة تصحيح الرمز ، يمكن للمرء أن يكرر $ CMD للحصول على محتوى $ CMD Writen في أعلى اليسار من الصفحة التالية.
  • إذا قمت بكتابة رمز PHP CRAPY والحصول على صفحة فارغة عند استخدام الخطاف ، فيمكنك إضافة إلى DRUPAL/INDEX.PHP المكالمات التالية: error_reporting (e_all) ؛ ini_set ('display_errors' ، true) ؛ ini_set ('display_startup_errors' ، true) ؛ التي تسمح وجود معلومات تصحيح.

  • نصائح أخرى

    عند العودة إلى الوراء والنظر إلى الصورة الكبيرة ، لديك العديد من الخيارات.

    1. استخدم OpenID (هناك وحدة Drupal الأساسية لذلك) لكلا الموقعين
    2. استخدم LDAP (هناك وحدة Drupal Contrib جيدة حقًا)
    3. انظر إلى الوحدات الأخرى التي توفر مشاركة تسجيل الدخول إلى المستخدم مع تطبيقات أخرى (مثل http://drupal.org/project/phpbb أو http://drupal.org/project/moodle أو الكثير من الآخرين) للإلهام
    4. اطلب من تطبيق الويب الخاص بك استخدام جدول مستخدم Drupal. هذا أمر سهل نسبيًا لأن اسم المستخدم موجود في نص عادي وكلمة المرور فقط MD5'ed (لذلك لا توجد أملاح أو أي شيء لتوضيح المياه).

    في الأساس، Hook_user مخطئ.ما عليك فعله هو استخدام Hook_form_alter لتغيير المعلمة "#validate" لنموذج تسجيل الدخول.بهذه الطريقة، يتم تمرير التحقق من الصحة إلى وظيفتك في الوحدة النمطية الخاصة بك حيث تحصل على $form_values['username'] و$form_values['password'].يمكنك تمرير ذلك إلى عنوان URL الخاص بك عبر لفة.إذا تم إرجاعه بشكل صحيح، فلا يُرجع شيئًا.إذا لم يتم إرجاعه، استخدم form_set_error وسيرفض تسجيل الدخول.

    حظ سعيد!

    من أجل استرداد استجابة من صفحة ، يمكنك استخدامها drupal_http_request ()

    ومذكرة أمان عامة ، تأكد من أنك مصادقة الطلبات بين الطلبات والتحقق من صحتها. إن تمرير كلمات المرور في نص عادي عبر معلمات GET عبر HTTP يجعلني أيضًا من الغثيان ، لكنني لا أعرف تطبيق التطبيق الخاص بك.

    مرخصة بموجب: CC-BY-SA مع الإسناد
    لا تنتمي إلى StackOverflow
    scroll top