تسجيل الدخول باستخدام Apple

المشكلتان 1 و 2 ناتجتان عن خيار تنفيذ متعمد من شركة أبل. لذا، لا يُعتبران حادثة تقنية بحتة، ويمكننا العمل على تجاوزهما. أما المشكلة 3 فتتعلق بمكتبة omniauth-apple، لذا يمكننا إصلاحها.

ما نحتاجه من أبل هو تضمين الاسم والبريد الإلكتروني في عمليات المصادقة اللاحقة. للأسف، اعترفوا بهذا السلوك وذكروا أنه يعمل كما هو مصمم: https://forums.developer.apple.com/thread/121496

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

ومع ذلك، أنا فضولي: هل رأى أحدكم مواقع ويب أخرى تستخدم ميزة “تسجيل الدخول عبر أبل”؟ أعتقد أنني رأيت فقط التطبيقات الأصلية تستخدمها :thinking:

3 إعجابات

هذه الميزة تبدو منطقية للغاية بالنسبة لي، حيث يربط تطبيقنا على iOS بموقع discourse الإلكتروني، ولا يتطلب التطبيق أي متطلبات تسجيل دخول للميزات الأخرى.
إنه مريح جدًا للمستخدمين لتسجيل الدخول باستخدام هذه الطريقة، لأن معظمهم مسجلون بالفعل في الجهاز، وتستخدم Apple Pay للمشتريات داخل التطبيق نفس الحساب.

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

إنه بعيد كل البعد عن الانتشار الواسع مثل جوجل أو فيسبوك وما إلى ذلك، لكنني رأيت استخدامه في عدة أماكن، مثل ebay.com وwordpress.com وkayak.com.

3 إعجابات

قد يستخدمون واجهة برمجة تطبيقات (API) مختلفة. هناك سكريبت جافا سكريبت يمكنك إضافته، لكنني أعتقد أنه لن يتكامل مع نظام OAuth العام الذي يستخدمه ديسكوس:

لنأخذ موقع Kayak.com كمثال.

إذا قمت بإجراء بعض التحقيقات في مستعرض المتصفح، سأجد هذا:

image

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

نعم، إنهم يستخدمون مكتبة جافا سكريبت الخاصة بشركة أبل. ومع ذلك، لا تزال تعتمد على نفس واجهة برمجة التطبيقات ‘OAuth’ (وليس OAuth فعليًا) في الخلفية.

حتى أن إيباي لا تحاول حتى سحب معلومات المستخدم. بعد تسجيل الدخول باستخدام أبل، يُطلب منك إدخال بريدك الإلكتروني:

أعتقد أن كايك ووردبريس يخزنان معلومات المستخدم مؤقتًا من محاولة المصادقة الأولى، وفقًا لتوصيات أبل.

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

6 إعجابات

أعتقد أن جميع تغييرات Apple iOS الأخيرة جعلت هذا ممكنًا الآن، أليس كذلك؟

3 إعجابات

هل حدث أي تغيير متعلق بتسجيل الدخول عبر Apple مؤخرًا؟

بالتأكيد يمكننا جعله يعمل كما هو - سيتطلب ذلك بضعة أيام من التغلب على هذه المشكلات. لكننا سنظل عالقين في استقبال البريد الإلكتروني والاسم فقط عند أول تسجيل دخول على الإطلاق.

5 إعجابات

أعتقد أنهم قاموا بتحسينه قليلاً، لكنني لا أستطيع بسهولة العثور على أي تغييرات محددة.

أعتقد أن استلام البريد الإلكتروني مرة واحدة فقط ليس مشكلة كبيرة؟ أظن أننا بحاجة إلى اختبار ما يحدث عند تغيير بريدك الإلكتروني المرتبط بحساب Apple ID الخاص بك؟

3 إعجابات

يجب أن نواصل استلام نفس المعرف الفريد (UID)، لكننا لن نستلم البريد الإلكتروني الجديد. سيتعين على المستخدم تحديثه يدويًا في Discourse.

3 إعجابات

أعتقد أننا يجب أن نتحقق من هذا مرة أخرى، لكن بصراحة، لا أرى أن هذا يمثل دراما ضخمة تمنعنا من تنفيذ ذلك.

تدفق تسجيل الدخول على أجهزة iOS رائع جدًا بفضل تسجيل الدخول عبر Apple، بالإضافة إلى توفير المصادقة الثنائية عبر Face ID.

5 إعجابات

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

13 إعجابًا

تم تسليم المستودع إلى ديفيد الذي قام بنقله إلى Discourse :slight_smile:

شكرًا لك على تحمل هذه المسؤولية.

11 إعجابًا

قرأت هذا الموضوع 2-3 مرات لكنني لا أتذكر ما إذا كنتم قد حاولتم استخراج البريد الإلكتروني من رمز JWT المقدم.

هذا هو الطريقة التي أقوم بها في الكود الأصلي. لست متأكدًا مما إذا كانت واجهة الويب API تسمح بذلك.

في تسجيل الدخول الأول، يمكنك الحصول على البريد الإلكتروني مباشرة من ASAuthorizationAppleIDCredential.email.
أما في تسجيلات الدخول اللاحقة، فيمكن العثور على البريد الإلكتروني إذا قمت بفك تشفير بيانات JWT واستخراج حقل “email”.

بهذا يمكن تنفيذ الميزة، أليس كذلك؟
سيكون البريد الإلكتروني المقدم هو الذي اختاره المستخدم، سواء كان شخصيًا أو عشوائيًا.

نعم، هذا صحيح.

هذا لا يتطابق مع تجربتي. عندما راجعت آخر مرة، لم يكن الـ JWT يحتوي على البريد الإلكتروني في تسجيلات الدخول اللاحقة.

على أي حال، نحن نعتزم جعل هذا يعمل قريبًا، وسأقوم بتحديث هذا الموضوع عندما يكون جاهزًا :slight_smile:

4 إعجابات

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

إذا لم يقوموا بتحديث النسخة على الويب لتكون مشابهة، فقد تكون الحل الوحيد هو توليد بريد إلكتروني وهمي تلقائيًا (مؤكد تلقائيًا) والسماح للمستخدم بتغييره لاحقًا إذا رغب في ذلك.

هذا يعني الاعتماد على المعرّف الذي توفره Apple، وهو ليس حلاً سيئًا جدًا، لكنه يثير بعض الشكوك :slight_smile: قليلاً.

4 إعجابات

من الممكن جداً أنهم قد حسّنوا الأمور - سأحرص على التحقق مرة أخرى :+1:

6 إعجابات

نحن نعلم أنه يمكننا جعل هذا يعمل. ما يصبح معقداً هو:

  • عنوان بريدك الإلكتروني لـ Apple ID هو jane.champion@somewhere.com

  • قمت بالتسجيل في Discourse باستخدام Apple

  • قمت بتغيير عنوان بريد Apple ID إلى jane.row@somewhere.com

  • قمت بتسجيل الدخول إلى Discourse … ما زلنا نعتقد أنك jane.champion@somewhere.com

  • ستبدأ إشعارات البريد الإلكتروني في Discourse في الارتداد إلى الأبد.

نحن غير واضحين بشأن الإجراء المتبع عند تغيير عناوين البريد الإلكتروني لـ Apple ID وكيف يمكننا الرد عليه إن أمكن.

رأيي في هذا الشأن هو أننا… نتعايش ببساطة مع هذه الحالة الحدية، وعلى الأقل يمكن للمستخدمين اختيار تغيير عناوين البريد الإلكتروني في Discourse لمثل هذه الحالات الحدية.

3 إعجابات

لقد قمت بالاختبار اليوم، والخبر السار هو أنه يبدو أن أبل قد أصلحت المشكلة :smiley: أرى عنوان البريد الإلكتروني حاضرًا في كل عملية مصادقة.

لا يزال لدي بعض المشكلات التي يجب حلها، لكنني أأمل في إطلاق شيء علني هذا الأسبوع.

13 إعجابًا

أود القول إن هذا بالتأكيد مرشح للإصدار مع Discourse. يجب أن نسعى لسحب الكود إلى النواة أو على الأقل تجميع الإضافة للإصدار الرئيسي التالي. (بالتأكيد ليس الإصدار الأسبوع القادم :slight_smile: )

13 إعجابًا

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

تحتاج إلى حساب مطور Apple (مدفوع؟)، ويجب عليك إعداد جميع أنواع التحقق من النطاق والشهادات. بالتأكيد يمكن تحقيق ذلك مع وجود دليل تعليمي جيد.

13 إعجابًا