باستخدام Omniauth، كيف يمكنني رؤية مستودعات المستخدم الذي قام بتسجيل الدخول باستخدام Github؟
-
20-12-2019 - |
سؤال
لقد قمت بإعداد Omniauth على تطبيق Rails 4 الخاص بي للسماح للمستخدم بتسجيل الدخول باستخدام Github.
هذا الجزء يعمل بشكل جيد.
الآن، أود أن أدرج مستودعات هذا المستخدم (أطلب النطاق repo
عندما يطلب من المستخدم ترخيص تطبيقي.
لقد قمت بالكثير من البحث على Google، لكني لا أفهم كيفية القيام بذلك.
هل يمكن لأي أحد أن يخبرني كيف يمكنني استخدام المصادقة الحالية لإدراج مستودعات المستخدم الخاص بي؟
المحلول
حسنًا، OmniAuth هي مجرد مكتبة مصادقة مرنة.والغرض الوحيد منه هو مصادقة المستخدمين.أي سلوك مخصص تريده يجب أن يتم تنفيذه بواسطتك أو بواسطة جوهرة أخرى.
يمكنك تحقيق ما تريد بمجرد استخدام واجهة برمجة تطبيقات GitHub الموثقة جيدًا:
# callbacks_controller.rb
require "open-uri"
require "json"
omniauth = env['omniauth.auth']
repositories_json = open(omniauth.extra.raw_info.repos_url,
"Accept" => "application/vnd.github.v3+json",
"Authorization" => "token #{omniauth.credentials.token}"
).read
repositories = JSON.parse(repositories_json)
إذا كان هذا هو كل ما تحتاجه، فاستخدمه بكل الوسائل.إذا كان لديك متطلبات أخرى إلى جانب هذا، فربما ينبغي عليك إلقاء نظرة على جوهرة جيثب.
أيضًا، يجب عليك استخدام النطاق فقط repo
إذا كنت ترغب في الوصول إلى المستودعات الخاصة لمستخدميك.ويعد طلب الوصول إلى مستودعات التخزين الخاصة بالمستخدم أمرًا تطفليًا بعض الشيء، لذا لا تفعل ذلك باستخفاف.
إذا كنت تريد حقًا الوصول إلى المستودعات الخاصة للمستخدم، فيجب عليك إلحاقها ?type=all
إلى نهاية repos_url.لذلك عليك أن تفعل شيئًا مثل:
open("#{omniauth.extra.raw_info.repos_url}?type=all" ... )