عندما يقوم المستخدم بالتسجيل، تعمل رسالة البريد الإلكتروني للتنشيط بشكل جيد. ومع ذلك، فإن محاولة تسجيل الدخول وإعادة إرسال رسائل البريد الإلكتروني للتنشيط تؤدي إلى سجل الإنتاج التالي:
بدأ POST "/u/action/send_activation_email" لـ (تمت إزالة عنوان IP والطابع الزمني)
المعالجة بواسطة UsersController#send_activation_email كـ */*
اكتمل 404 غير موجود في 2 مللي ثانية (طرق العرض: 0.1 مللي ثانية | ActiveRecord: 0.0 مللي ثانية | التخصيصات: 542)
يحدث هذا الخطأ على جميع الحاويات التي تعمل بالإصدار 3.2.0.beta1-dev. “production_errors.log” فارغ.
خطوات التكرار:
سجل باستخدام النموذج الافتراضي
تجاهل رسالة البريد الإلكتروني للتنشيط وحاول تسجيل الدخول
انقر فوق “إعادة إرسال بريد التنشيط” في النافذة المنبثقة “لا يمكنك تسجيل الدخول بعد. أرسلنا سابقًا بريدًا إلكترونيًا للتنشيط إليك…”
“حدث خطأ: لم يتم العثور على عنوان URL أو المورد المطلوب.”
انقر فوق “موافق” ثم تظهر النافذة المنبثقة التالية “لقد أرسلنا بريدًا إلكترونيًا آخر للتنشيط إليك على…” (ومع ذلك، لم يتم إرسال بريد التنشيط الثاني فعليًا)
أرى أن الدالة/الإجراء send_activation_email مقيد بمعدل.
def send_activation_email
if current_user.blank? || !current_user.staff?
RateLimiter.new(nil, "activate-hr-#{request.remote_ip}", 30, 1.hour).performed!
RateLimiter.new(nil, "activate-min-#{request.remote_ip}", 6, 1.minute).performed!
end
هل سيؤدي هذا إلى خطأ 404؟ هل هناك أي سجلات أخرى يمكنني الاطلاع عليها لتصحيح هذه المشكلة؟
أقوم باختبار هذا على موقع التطوير المحلي الخاص بي، ويبدو أن المشكلة هي أن معاملي username أو email لم يتم تعيينهما لطلب POST الذي يتم إجراؤه إلى /u/action/send_activation_email عند إجراء الطلب بعد محاولة مستخدم لم ينقر على الرابط في البريد الإلكتروني للتنشيط تسجيل الدخول باستخدام اسم مستخدم/كلمة مرور:
إذا، بدلاً من ذلك، نقر المستخدم على زر “إعادة إرسال بريد التنشيط” من صفحة “تم إنشاء الحساب” التي تظهر مباشرة بعد تسجيل حساب، يتم تعيين المعامل username للطلب. كمرجع، الزر الذي يعمل هو هذا:
مجرد إضافة ملاحظة بأن هذه المشكلة تمنع أيضًا المستخدمين الذين تم إلغاء تنشيط حساباتهم من صفحة المسؤول / المستخدمين الخاصة بهم من إرسال البريد الإلكتروني للتنشيط بعد محاولة تسجيل الدخول والنقر فوق الزر “إعادة إرسال البريد الإلكتروني للتنشيط”.