غير قادر على إنشاء مستخدم في Discourse من WP باستخدام نموذج التسجيل الجديد

لدي Discourse Connect مُعدّ مع ووردبريس كنقطة تسجيل وتسجيل دخول رئيسية.

لدي نموذجان لتسجيل المستخدمين بتدفقات مختلفة:

  1. التسجيل القياسي من الصفحة الرئيسية (هذا هو القديم ولا يزال ينشئ مستخدمًا في Discourse)
  2. تسجيل المستخدم باستخدام تدفق أداة. (هذا ينشئ مستخدم ووردبريس ولكنه لا ينشئ مستخدمًا في Discourse).

لا أرى أي إعدادات في إضافة Discourse خاصة بنموذج تسجيل. عندما أذهب إلى المستخدم، لا أرى اسم مستخدم Discourse في ووردبريس للنموذج الثاني. رابط

لدي سؤالان:

  1. ما الذي قد أكون أفتقده هنا؟ هل يتطلب أي إعداد إضافي لجعله يعمل للنموذج الجديد؟
  2. كيف يمكنني إنشاء مستخدم في Discourse وربطه بووردبريس للأعضاء الموجودين في ووردبريس؟

تصحيح: بعد مزيد من التحليل، يبدو أن بعض المستخدمين لا يتم إنشاؤهم في Discourse حتى من النموذج الأول.

إعجاب واحد (1)

هل واجه أي شخص هذه المشكلة؟ أنا عالق حقًا هنا.

مرحباً @Himanshu_Singh،

هل يمكنك أن تشرح لي، خطوة بخطوة، كيف يراها المستخدم:

  1. ماذا يحدث مع نموذج “التسجيل القياسي” الخاص بك؛
  2. ماذا يحدث مع نموذج “تسجيل المستخدم” الخاص بك.

على سبيل المثال:

  1. يذهب المستخدم إلى النموذج ويدخل تفاصيله
  2. يتم إعادة توجيه المستخدم إلى discourse..

قم بتضمين الخطوات التي يحدث فيها شيء لا تريده أن يحدث والخطوات التي ترغب في حدوثها بدلاً من ذلك.

إعجابَين (2)

مرحباً أنجوس،

في التسجيل القياسي،

  1. ينتقل المستخدم إلى النموذج ويضيف اسمه وبريده الإلكتروني وكلمة المرور
  2. ثم يتم تسجيل دخول المستخدم تلقائيًا
  3. ثم عندما ينقر المستخدم على رابط المجتمع، يتم تسجيل دخوله تلقائيًا إلى Discourse (حيث قام المكون الإضافي Discourse Connect بعمله لإنشاء مستخدم جديد في Discourse)

بالنسبة للنموذج الثاني،

  1. يضيف المستخدم اسمًا وبريدًا إلكترونيًا.
  2. نقدم لهم كلمة مرور مؤقتة
  3. بقية العملية هي نفسها، أي يتم تسجيل دخول المستخدم تلقائيًا عند التسجيل
  4. ولكن في هذه الحالة، لم يتم إنشاء المستخدم في Discourse.

لا أرى أي إعداد في Discourse Connect يتم تشغيله عن طريق تغيير نموذج للتسجيل. هل هناك خطاف (hook) يحتاج إلى تشغيله عند تسجيل مستخدم في ووردبريس (WP) لا يتم تشغيله في حالة النموذج الثاني؟

في الواقع، ما هو خطاف (hook) ووردبريس (WordPress) الذي يُستخدم لإنشاء مستخدم في Discourse؟ يجب أن يكون هناك استدعاء لواجهة برمجة التطبيقات (API) لتشغيل نشاط في Discourse. ألا يمكن أن يفشل لسبب ما؟

إعجاب واحد (1)

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

إعجاب واحد (1)

الحالة الأولى حيث يكون المستخدم مسجلاً في WP -
لا يحتاج المستخدم إلى النقر على تسجيل الدخول في Discourse ويتم تسجيل دخوله تلقائيًا
بالنقر على الرابط التالي في WP -

https://community.showprowess.com/session/sso?return_path=/

إذا استخدمت الرابط فقط - https://community.showprowess.com/ - للانتقال إلى Discourse من WP، فلن يتم تسجيل دخول المستخدم وسيتعين علي النقر على زر تسجيل الدخول في Discourse لتسجيل دخول المستخدم.

بمجرد تسجيل دخول المستخدم، يظل مسجلاً الدخول حتى أقوم بتسجيل الخروج من WP.

هذا يخلق مشكلة لأنه إذا لم ينقر المستخدم على /session/sso?return_path=/، فلن يتم تسجيل دخول المستخدم. هذا يقيدني من توجيه المستخدم إلى صفحة الرسائل الخاصة من WP إلى Discourse. (وظيفة أحتاجها كجزء من المنتج)

على سبيل المثال، أريد إرسال رسالة خاصة إلى المستخدم X،
أضيف هذا الرابط إلى المنشور المخصص الخاص بهم على WP -
https://community.showprowess.com/new-message?username=x&title=Message%20from%20

نظرًا لأن هذا هو الرابط الأول الذي أنقر عليه، فلن تفتح نافذة الرسالة. بدلاً من ذلك، يتم تسجيل دخولي إلى Discourse. الآن يتعين علي العودة ثم النقر على نفس الرابط (رابط الرسالة) مرة أخرى لجعله يعمل.

يبدو الأمر كالتالي -

هذا مزعج للمستخدمين.

في السابق، كان كل هذا يعمل بشكل جيد حيث كان المستخدم يسجل دخوله تلقائيًا إلى Discourse وكان الرابط https://community.showprowess.com يأخذني إلى صفحة Discourse مسجلة الدخول. ربما تم تسجيل دخول المستخدم باستخدام ملفات تعريف الارتباط للمتصفح أو شيء من هذا القبيل، لكن هذا لم يعد يعمل.

عندما لا يكون المستخدم مسجلاً في Discourse
يحدث هذا في كلا النموذجين، أي القديم والجديد.
في هذه الحالة، قمت بتسجيل الدخول مرة أخرى ومررت بعملية الإعداد، وهذه المرة تم إنشاء المستخدم في Discourse. قبل ذلك، لم يكن المستخدم موجودًا في Discourse (لقد تحققت من قائمة المستخدمين الجدد في منطقة المسؤول قبل تسجيل الدخول مرة أخرى).
لقد اتبعت نفس الخطوات المذكورة أعلاه - انقر على رابط /sessions لتسجيل الدخول التلقائي في Discourse. إذا نقرت على نطاق المجتمع فقط، فلن يتم تسجيل الدخول.

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

آمل أن يساعد هذا.

إعجاب واحد (1)

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

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

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

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

إحدى الطرق التي يمكنك من خلالها تشغيل تسجيل الدخول “التلقائي”، وإعادة توجيههم إلى مكان معين في Discourse بعد تسجيل الدخول، هي استخدام المسار الذي شاركته بالفعل

https://community.showprowess.com/session/sso?return_path=[any path in Discourse]

إذا كان المستخدم مسجل الدخول بالفعل في ووردبريس، ولكنه لم يسجل الدخول بعد إلى Discourse عند استخدام عنوان URL هذا، فسيحدث ما يلي:

  1. يبدأ Discourse تلقائيًا عملية تسجيل الدخول لـ DiscourseConnect
  2. يتم إعادة توجيه متصفح المستخدم إلى ووردبريس
  3. المستخدم مسجل الدخول بالفعل، لذلك يتم إعادة توجيه المستخدم تلقائيًا مرة أخرى إلى Discourse
  4. إذا كان هناك قيمة return_path في عنوان URL المستخدم في 1، فسيتم إعادة توجيه المستخدم إلى هناك

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

لاحظ أنه يمكنك فعليًا جعل return_path أي عنوان URL، حتى نطاق منفصل، إذا قمت بتعيين إعداد الموقع discourse connect allows all return paths إلى صحيح.

إعجابَين (2)

شكراً لك! هذا مفيد في حل مشكلة تسجيل دخول المستخدم تلقائياً من ووردبريس إلى ديسكورس. يمكنني استخدام return_path لتوجيه المستخدم إلى أي صفحة في ديسكورس. هذا يحل مشكلة توجيه المستخدم إلى صفحة الرسالة.

ومع ذلك، ما زلت غير متأكد لماذا، في بعض الحالات، لا يتم إنشاء المستخدم في ديسكورس عندما يتم إنشاء المستخدم في ووردبريس. هل تعرف متى يتم إنشاء المستخدم حقاً في ديسكورس من خلال تسجيل الدخول الأحادي (SSO)؟

  1. هل يتم ذلك عند إنشاء مستخدم في ووردبريس؟
  2. هل يتم ذلك عندما يحاول مستخدم ووردبريس جديد الوصول إلى ديسكورس ثم يتم إنشاء المستخدم وتسجيل دخوله وتوجيهه إلى ديسكورس؟

ما هي الخطاف (hook) الذي نستخدمه في ووردبريس لإنشاء مستخدم في ديسكورس؟

أحاول فهم أي حالة استثنائية قد لا تؤدي إلى إنشاء مستخدم في ديسكورس عند إنشاء مستخدم في ووردبريس.

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

شكراً لمساعدتك يا أنجوس. أقدر ذلك.

إعجاب واحد (1)

مع الإعدادات الافتراضية، يتم إنشاء المستخدمين في Discourse في المرة الأولى التي يسجل فيها المستخدم الدخول إلى Discourse باستخدام DiscourseConnect. حتى تلك اللحظة، لا يوجد مستخدم في Discourse.
يحتوي المكون الإضافي WP Discourse أيضًا على إعداد “إنشاء أو مزامنة مستخدمي Discourse عند تسجيل الدخول” والذي، عند تمكينه، سيقوم بإنشاء مستخدم عبر واجهة برمجة تطبيقات Discourse بعد تسجيل المستخدم في Wordpress. يستخدم هذا الإعداد إجراء wp wp_login، لذلك يجب أن تتسبب عملية تسجيل المستخدم في تشغيل هذا الإجراء لكي تعمل هذه الميزة.

إعجابَين (2)

الآن كل شيء منطقي. شكرًا لك، أنجوس.

لدي خيار “إنشاء أو مزامنة مستخدمي Discourse عند تسجيل الدخول” محددًا. لا يتم إنشاء المستخدم في Discourse لأن بعض المستخدمين يسجلون في WP ولكن لا يزورون المجتمع عند تسجيل الدخول لأول مرة. قد يعودون ويسجلون الدخول ثم ينقرون على رابط المجتمع، وبعد ذلك يتم إنشاء المستخدم.

تسجيل الدخول التلقائي الحالي بعد التسجيل في WP لا يستخدم WP_login

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );
    
function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Edit as required
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit(); 
  }
}

أفضل إنشاء المستخدم في Discourse عند التسجيل في WP.
لدي خطافات مخصصة على نموذج تسجيل المستخدم يمكنها تشغيل واجهة برمجة التطبيقات (API). هل هناك رمز يمكنني إضافته إلى الخطاف المخصص لإنشاء مستخدم في Discourse عبر واجهة برمجة التطبيقات (API)؟

هذا هو الجزء الذي لا أعرف كيفية القيام به، أي تشغيل wp_login من خطاف مخصص.

إعجابَين (2)

فقط أضف مشغل إجراء إلى الكود الخاص بك.

do_action( 'wp_login' );
إعجابَين (2)

لقد فعلت بالضبط ما أخبرتني به.

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );
    
function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Edit as required
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
   do_action( 'wp_login' );

//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit(); 
  }
}

لكنني أحصل على الخطأ التالي:
الرسالة: Uncaught ArgumentCountError: Too few arguments to function WPDiscourse\WordPressEmailVerification\WordPressEmailVerification::verify_email_after_login(), 1 passed in /home/customer/www/[domain.com/public_html/wp-includes/class-wp-hook.php on line 307 and exactly 2 expected in /home/customer/www/[domain.com/public_html/wp-content/plugins/wp-discourse/lib/wordpress-email-verification.php:128**

لدي رمز آخر يتجاوز التحقق من البريد الإلكتروني

add_filter( 'discourse_email_verification', 'disable_discourse_email_verification_prowess');
function disable_discourse_email_verification_prowess() {
  wp_mail( 'himanshu@eshowprowess.com', 'User verified', 'Status must change' ); 
   
    return false;
}

هل هذه مشكلة في تسلسل التعليمات البرمجية أم أحتاج إلى تمرير بعض المعلمات إلى إجراء wp_login؟

تعديل: تم إنشاء المستخدم في ووردبريس وتم تسجيل دخوله ولكن لم يتم إنشاء المستخدم في Discourse.

إعجاب واحد (1)

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

3 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.