عند استدعاء user-api-key/new باستخدام client_id مستخدم بالفعل من قبل مستخدم آخر، سيُصدر المنتدى خطأ RecordNotUnique وسيفشل بصمت مع خطأ في الخادم الداخلي.
قد يرغب هذا في الفشل بشيء أقل صمتًا يبلغ المستخدم بوجود مفتاح واجهة برمجة تطبيقات بهذا المعرف العميل بالفعل.
على الرغم من أن هذا يقودني إلى السؤال الثاني، هل من المفترض أن تعمل مفاتيح واجهة برمجة تطبيقات المستخدم بهذه الطريقة؟ هل من المفترض أن يكون معرف العميل فريدًا بين جميع المستخدمين؟
شكراً لإبلاغك عن هذا، لدي بعض الأسئلة للمساعدة في التحقيق في الأمر.
هل يمكنك تقديم مثال بسيط لتكرار هذا حتى أتمكن من تصحيح هذا محليًا؟ ما هي حالة الاستخدام الخاصة بك لمفاتيح واجهة برمجة تطبيقات المستخدم؟ هل تستخدم تطبيق الهاتف المحمول discourse hub أم شيئًا آخر؟
الترخيص الأول والمتكرر سينجح كمستخدم أول، عند استخدامه مرة أخرى لمستخدم آخر دون تغيير client_id سيفشل.
تُستخدم مفاتيح واجهة برمجة تطبيقات المستخدم للسماح للمستخدم باستخدام حساب المنتدى الخاص به في عميل اللعبة، حتى يتمكن من النشر من داخل اللعبة. لدينا أيضًا الكثير من المستخدمين الذين يستخدمونها للمصادقة باستخدام حسابات المنتدى على مواقعهم الخاصة.
بينما يجب أن يكون client_id فريدًا لعملاء اللعبة، بحيث يتم إدراج كل عميل كعميل منفصل في شاشة التطبيقات. بالنسبة لحالة استخدام الموقع، سترغب في الحصول على client_id واحد حتى لا يتم إدراج كل تسجيل دخول بشكل منفصل.
لا أفهم كيف يرتبط هذا بالموضوع الأصلي، حيث يصف الموضوع الأصلي حالة يكون فيها معرف العميل مشتركًا بين عدة مستخدمين، بينما يبدو أن حالتك تصف حالة يكون للمستخدم فيها معرفات عملاء متعددة.
يُطلق عليه معرف العميل وليس معرف المستخدم لأن المستخدم يمكن أن يكون لديه عملاء متعددون!
في معظم المعايير مثل OAuth، يُوصف معرف العميل بأنه “معرف التطبيق” ويمكن استخدامه لجميع المستخدمين (وليس لمستخدم واحد فقط)، على سبيل المثال، تسجيلات الدخول الاجتماعية لمنتداك تستخدم دائمًا نفس معرف العميل.
ومع ذلك، نظرًا لأن مفاتيح واجهة برمجة تطبيقات المستخدم مصممة في المقام الأول للعملاء مثل تطبيقات Discourse، فقد تم تصميمها لتكون فريدة، وسيكون من الجيد معرفة ما إذا كانت كذلك.
ستوضح الإجابة على ما سبق ما إذا كان هناك فحص مفقود في user_api_keys.rb أو فهرس خاطئ في قاعدة البيانات. لأن هذه الطلبات حاليًا تثير خطأ 500 مخيف وتظهر في نقطة النهاية /logs الخاصة بنا.
يجب أن يكون الخطأ أفضل، نعم، ولكن يجب أن يكون client_id فريدًا.
عندما ترسل المستخدمين بهذه الطريقة، يجب عليك إنشاء معرف فريد في استدعاء واجهة برمجة التطبيقات الخاصة بك. الفهرس صحيح، يمكن لمستخدم واحد أن يمتلك معرفات عملاء متعددة.