لدي تطبيق جوال. يُعد Discourse مصدر المصادقة الخاص بي. لتسجيل الدخول إلى التطبيق الجوال، يجب على المستخدم كتابة اسم المستخدم وكلمة المرور الخاصة به. بعد ذلك، سأقوم باستدعاء واجهة برمجة تطبيقات (API) لتسجيل الدخول إلى Discourse لمصادقة المستخدم.
الآن، توجد بعض الروابط داخل التطبيق الجوال تؤدي إلى منتدى Discourse. أود أن يتم تسجيل دخول المستخدم تلقائيًا إلى المنتدى عند النقر على هذه الروابط. إن مطالبة المستخدمين بكتابة كلمات المرور مرتين تُعد تجربة مستخدم سيئة للغاية؛ المرة الأولى عند رغبتهم في تسجيل الدخول إلى التطبيق، والمرة الثانية عند رغبتهم في تسجيل الدخول إلى المنتدى.
بما أن تسجيل الدخول بدون كلمة مرور عبر رابط يُرسل إلى بريد المستخدم الإلكتروني ممكن، فأعتقد أن هذه العملية ممكنة أيضًا. ربما عبر إضافة بسيطة.
متى تحتاج إلى إنجازه؟
أسبوع واحد.
ما هو ميزانيتك بالدولار الأمريكي التي يمكنك تقديمها لهذه المهمة؟
300 دولار.
طريقة تسجيل الدخول عبر البريد الإلكتروني تعمل كالتالي: عند النقر على زر “باستخدام البريد الإلكتروني” في نافذة تسجيل الدخول، يتم إنشاء رمز مميز (token) خاص بالمستخدم ويتم تخزينه في email_tokens. يمكنك رؤية هذا الرمز في الرابط (سلسلة الأرقام والحروف):
سيكون عليك توليد هذا الرمز للروابط في تطبيقك في كل مرة يسجل فيها المستخدم الدخول إلى تطبيقك. لا أعتقد (?) أن هذه الوظيفة متاحة حاليًا عبر واجهة برمجة التطبيقات (API)، لذا ستحتاج أولاً إلى إعداد نقطة نهاية (endpoint).
يجب أن تكون نقطة النهاية هذه محمية بمصادقة. ستحتاج إلى طريقة للتعامل مع ذلك في تطبيقك. ربما يكون لديك ذلك بالفعل؟
ثم ستحتاج إلى النظر في أمور مثل انتهاء صلاحية الرمز. كم من الوقت يجب أن يظل الرمز ساريًا؟ وكيف تستلم رمزًا جديدًا وتحديث الروابط بمجرد انتهاء صلاحيته؟
يبدو أن هناك طريقة أفضل للتعامل مع هذه المشكلة من إضافة هذه الميزة بشكل لاحق.
نعم، كنت أفكر في هذا بالضبط. وبما أن تسجيل الدخول عبر البريد الإلكتروني مُنفَّذ بالفعل، فيجب أن يكون ذلك ممكنًا أيضًا. لا أعرف التفاصيل المتعلقة بالتنفيذ الفعلي. ربما ينبغي تنفيذ ذلك عبر إضافة (plugin). إذا كنت قادرًا على ذلك، فأخبرني.
نعم، المصادقة تتم عبر واجهة برمجة تطبيقات تسجيل الدخول في ديسكورد (Discourse login API)، ولا توجد مشكلة في ذلك.
هل يحتوي رابط تسجيل الدخول عبر البريد الإلكتروني على قيمة انتهاء صلاحية؟ يمكننا استخدام نفس الآلية أو شيء مشابه.
أما الأمور الأخرى مثل جلب رمز جديد فسيتم تنفيذها بواسطة التطبيق نفسه.
نعم، يتم تحديد انتهاء صلاحية رمز البريد الإلكتروني من خلال إعداد الموقع “ساعات صلاحية رمز البريد الإلكتروني”.
إذن، بشكل أساسي، تريد إضافة ملحق يضيف نقطة نهاية لإنشاء وإرجاع رمز بريد إلكتروني (email_token) لمستخدم، وستقوم باستدعائه بشكل منتظم عند انتهاء صلاحية الرموز؟
كما أنني أود توجيه المستخدم إلى موضوع محدد؛ فإذا تم إضافة معرف الموضوع أو الرابط، فبعد تسجيل الدخول، سيتم إعادة توجيه المستخدم إلى ذلك الموضوع، مما سيجعل الأمر مثالياً.
هل هناك نهج آخر يتمثل في جعل الروابط داخل التطبيق تشير إلى الخلفية الخاصة بك (backend)؟ فعند النقر على الرابط، يتم إنشاء رابط مناسب في تلك اللحظة، ويتم إعادة توجيه العميل، بطريقة ما، للانتقال إلى المكان الصحيح.
وهذا يعني أنك لن تحتاج إلى إنشاء روابط المصادقة قبل أن ينقر المستخدم عليها.