إعادة تعيين كلمة المرور باستخدام ملف ruby مخصص

وظيفة مخصصة لتحديث كلمة المرور في discourse

هل يمكننا استخدام هذا الكود لتحديث كلمة المرور؟

مثال:-
User.find_by(username: ‘gollum’).update!(password: ‘shiiiire!-BAGGINS!’)

أو

هل يمكننا إنشاء إضافة مخصصة واستخدام نقطة نهاية مخصصة مثل API
وإنشاء رمز مميز ببيانات اعتماد المستخدم ثم إعادة تعيين كلمة المرور باستخدام API.

يرجى مشاركة أفضل طريقة لإنجاز هذه المهمة

مرحباً هيتيش،

ما هي حالة الاستخدام الخاصة بك؟ لماذا لا تستخدم الميزة المضمنة؟

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

شكرا على الرد

أنا أستخدم سكربت مخصص لترحيل مستخدمي Drupal إلى Discourse ولكن تم حفظ كلمة المرور كسلسلة تجزئة ولا يمكن للمستخدم تسجيل الدخول بكلمة مرور موثوقة مثل (admin@123)

ولكنه يسجل الدخول باستخدام تجزئة كلمة المرور الخاصة بهم مثل

على سبيل المثال: - 3sdfd32423@#423fdsfr

هل يمكنك من فضلك توضيح الميزة المضمنة قليلاً؟

هل ألقيت نظرة على هذا؟ قد يساعد:

إنه يدعم كلمات مرور Drupal 7:

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

مرحباً @Canapin

أيضًا، لقد استخدمت هذه الإضافة ولكنها لا تعمل

لا - إنه يعمل.

هذه واحدة من أقدم الإضافات الخارجية الموجودة (أكثر من 9 سنوات الآن!) وقد تم صيانتها وتعمل طوال الوقت. قد لا تعمل بالنسبة لك ولكن طريقة حل ذلك هي معرفة سبب عدم عملها بالنسبة لك بدلاً من محاولة مسار بديل.

هل يمكنك إعادة صياغة هذا من فضلك؟ أنا لا أفهم ما تقوله.

هل يقوم موقع Drupal الخاص بي بتخزين كلمات مرور المستخدمين في رمز مشفر والاحتفاظ بها في قاعدة بيانات قمت بنقل جميع المستخدمين إلى منصة تسمى Discourse باستخدام واجهة برمجة تطبيقات dsiscourse. أقوم بإنشاء حمولة بتفاصيل المستخدم ورموز كلمات المرور الخاصة بهم من قاعدة بيانات Drupal وأضعها في Discourse.

اعتقدت أن المستخدمين سيكونون قادرين على استخدام نفس تفاصيل تسجيل الدخول الخاصة بهم على Drupal، لكنها لا تعمل. لا يقبل Discourse كلمة المرور الفعلية للمستخدم، مثل “admin@123”. بدلاً من ذلك، يستخدم رمز تجزئة كلمة مرور المستخدم مثل “3sdfd32423@#423fdsfr”.

يأخذ Discourse رموز كلمات المرور من Drupal ويضعها في خوارزميته المشفرة الخاصة به في قاعدة بياناته الخاصة.

هل يمكنك أن ترينا كيف فعلت ذلك؟
إذا كنت تستخدم واجهة برمجة التطبيقات (API)، فلا يجب عليك تعيين تجزئة Drupal ككلمة مرور. يجب عليك تعيين التجزئة كحقل مستخدم مخصص يسمى import_pass. لست متأكدًا مما إذا كان ذلك ممكنًا باستخدام واجهة برمجة التطبيقات (API).

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

لقد اتبعت خطواتك أثناء تثبيت إضافة Discourse Migrate

  • قمت أولاً بتثبيت الإضافة في الـ discourse الخاص بي ولكن لم أقم بتمكينها ثم أنشأت حقلاً مخصصاً في الـ discourse بالاسم import_pass
  • في الحمولة، أضف تجزئة كلمة المرور المخزنة في هذا الحقل المخصص
  • بعد تحميل المستخدم إلى الـ discourse، قم بتمكين الإضافة وتسجيل الدخول في نافذة جديدة ببيانات اعتماد المستخدم ولكنهم لم يفعلوا ذلك


هذا بشكل صريح ليس جزءًا من الخطوات.

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

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

سيعمل هذا، قم بتشغيله من وحدة تحكم Rails (أضع علامة لك لرؤية التعديل @Hitesh_Sharma)

ufkey = "user_field_#{UserField.find_by(name: 'import_pass').id}"
User.all.each do |u|
  if u.custom_fields.key?(ufkey)
    u.custom_fields[:import_pass] = u.custom_fields[ufkey]
    u.custom_fields.delete(ufkey)
    u.save_custom_fields
  end
end
إعجابَين (2)