هذا هو الوثائق لفرع التنمية في Omniauth. يمكنك العثور على الوثائق لأحدث إصدار مستقر هنا
Omniauth هي مكتبة تقوم بتوحيد المصادقة متعددة الأمن لتطبيقات الويب. تم إنشاؤه ليكون قويًا ومرنًا ، ويفعل أقل قدر ممكن. يمكن لأي مطور إنشاء استراتيجيات لـ Omniauth يمكنها مصادقة المستخدمين عبر الأنظمة المتباينة. تم إنشاء استراتيجيات Omniauth لكل شيء من Facebook إلى LDAP.
من أجل استخدام Omniauth في تطبيقاتك ، ستحتاج إلى الاستفادة من استراتيجيات واحدة أو أكثر. يتم إصدار هذه الاستراتيجيات بشكل عام بشكل فردي مثل Rubygems ، ويمكنك رؤية قائمة محفوظة على المجتمع على الويكي لهذا المشروع.
يتم تضمين إحدى الاستراتيجيات ، التي تسمى Developer ، مع Omniauth وتوفر استراتيجية غير آمنة تمامًا غير قابلة للاستخدام والتي تطالب المستخدم بشكل مباشر بمعلومات المصادقة ثم يمررها مباشرة. يمكنك استخدامه كمكتب نائب عند البدء في التطوير وتبادل بسهولة في استراتيجيات أخرى لاحقًا.
كل استراتيجية omniauth هي برامج الوسيطة على الرف. هذا يعني أنه يمكنك استخدامه بنفس الطريقة التي تستخدم بها أي وسيطة وسيطة أخرى. على سبيل المثال ، لاستخدام استراتيجية المطورين المدمجة في تطبيق Sinatra ، يمكنك القيام بذلك:
require 'sinatra'
require 'omniauth'
class MyApplication < Sinatra :: Base
use Rack :: Session :: Cookie
use OmniAuth :: Strategies :: Developer
end نظرًا لأن Omniauth مبني للمصادقة متعددة الأمنيات ، فقد ترغب في ترك مساحة لتشغيل استراتيجيات متعددة. لهذا ، يمنحك فئة OmniAuth::Builder المدمجة طريقة سهلة لتحديد استراتيجيات متعددة. لاحظ أنه لا يوجد فرق بين الكود التالي واستخدام كل استراتيجية بشكل فردي كوسيط. هذا مثال قد تضعه في تهيئة القضبان في config/initializers/omniauth.rb :
Rails . application . config . middleware . use OmniAuth :: Builder do
provider :developer unless Rails . env . production?
provider :twitter , ENV [ 'TWITTER_KEY' ] , ENV [ 'TWITTER_SECRET' ]
endيجب أن تتطلع إلى الوثائق لكل مزود تستخدمه لمتطلبات التهيئة المحددة.
Omniauth مكتبة منخفضة للغاية. تم تصميمه ليكون مربعًا أسود يمكنك إرسال مستخدمي التطبيق الخاص بك عندما تحتاج إلى مصادقة ثم إعادة المعلومات. تم تصميم Omniauth عمداً بعدم الارتباط تلقائيًا بنموذج المستخدم أو وضع افتراضات حول عدد طرق المصادقة التي قد ترغب في استخدامها أو ما قد ترغب في القيام به بالبيانات بمجرد مصادقة المستخدم. وهذا يجعل Omniauth مرنة بشكل لا يصدق. لاستخدام Omniauth ، تحتاج فقط إلى إعادة توجيه المستخدمين إلى /auth/:provider ، حيث :provider هو اسم الاستراتيجية (على سبيل المثال ، developer أو twitter ). من هناك ، سوف تتولى Omniauth وتأخذ المستخدم من خلال الخطوات اللازمة لمصادقةها مع الاستراتيجية المختارة.
بمجرد مصادقة المستخدم ، ماذا تفعل بعد ذلك؟ يحدد Omniauth ببساطة تجزئة خاصة يسمى تجزئة المصادقة على بيئة رف طلب /auth/:provider/callback . يحتوي هذا التجزئة على أكبر قدر من المعلومات حول المستخدم كما تمكنت Omniauth من الاستفادة من الاستراتيجية المستخدمة. يجب عليك إعداد نقطة نهاية في التطبيق الخاص بك يتطابق مع عنوان URL للاتصال ، ثم يؤدي أي خطوات ضرورية لتطبيقك.
يوفر مفتاح omniauth.auth في البيئة تجزئة المصادقة التي ستحتوي على معلومات حول المستخدم المصادق عليه فقط بما في ذلك معرف فريد ، والاستراتيجية التي استخدموها للتو للمصادقة ، والتفاصيل الشخصية مثل الاسم وعنوان البريد الإلكتروني كما هو متاح. للحصول على وصف متعمق لما قد يحتوي عليه تجزئة المصادقة ، راجع صفحة Wiki Hash Auth.
لاحظ أن Omniauth لا تنفذ أي إجراءات تتجاوز بعض معلومات البيئة على طلب رد الاتصال. الأمر متروك لك تمامًا كيف تريد تنفيذ تفاصيل تدفق مصادقة التطبيق الخاص بك.
omniauth لا يتوافق مع OOTB مع Rack_CSRF. من أجل القيام بذلك ، يجب إضافة الكود التالي إلى رمز bootstrapping التطبيق:
OmniAuth :: AuthenticityTokenProtection . default_options ( key : "csrf.token" , authenticity_param : "_csrf" ) للبدء ، أضف الأحجار الكريمة التالية
Gemfile :
gem 'omniauth'
gem "omniauth-rails_csrf_protection"ثم أدخل omniauth كبرنامج وسيط
config/initializers/omniauth.rb :
Rails . application . config . middleware . use OmniAuth :: Builder do
provider :developer if Rails . env . development?
endيمكن إضافة مقدمي خدمات إضافية هنا في المستقبل. بعد ذلك ، نقوم بتسليم كل شيء باستخدام الطرق ووحدة التحكم وعرض تسجيل الدخول.
config/routes.rb :
get 'auth/:provider/callback' , to : 'sessions#create'
get '/login' , to : 'sessions#new'تطبيق/وحدات تحكم/Sessions_Controller.rb :
class SessionsController < ApplicationController
def new
render :new
end
def create
user_info = request . env [ 'omniauth.auth' ]
raise user_info # Your own session management should be placed here.
end
endالتطبيق/المشاهدات/الجلسات/new.html.erb :
<%= form_tag('/auth/developer', method: 'post', data: {turbo: false}) do %>
< button type =' submit ' > Login with Developer </ button >
<% end %> الآن إذا قمت بزيارة /login وانقر فوق زر تسجيل الدخول ، فيجب أن ترى شاشة تسجيل الدخول إلى مطور Omniauth. بعد إرساله ، يتم إرجاعك إلى طلبك في Sessions#create . يجب أن تعرض الزيادة الآن جميع تفاصيل Omniauth التي لديك لدمجها في إدارة المستخدم الخاصة بك.
إذا كنت تريد الخروج من مربع UserManagement ، فيجب عليك التفكير في استخدام Omniauth من خلال Prepise. يرجى زيارة صفحة ابتكار github لمزيد من المعلومات.
يتم تضمين البرامج الوسيطة التالية (افتراضيًا) لإدارة الجلسة في تطبيقات Rails. عند استخدام omniauth مع API Rails ، ستحتاج إلى إضافة واحدة من هذه الوسيطة المطلوبة مرة أخرى في:
ActionDispatch::Session::CacheStoreActionDispatch::Session::CookieStoreActionDispatch::Session::MemCacheStore إن الحيلة لإضافة هذه الأشياء مرة أخرى هي أنه ، بشكل افتراضي ، يتم تمرير session_options عند إضافته (بما في ذلك مفتاح الجلسة) ، لذلك لا يمكنك فقط إضافة session_store.rb use ActionDispatch::Session::CookieStore
لتوضيح: قد تعمل الجلسات ، ولكن سيتم تجاهل خيارات الجلسة الخاصة بك (أي أن مفتاح الجلسة سوف يتخلف عن _session_id ). بدلاً من التهيئة ، سيتعين عليك تعيين الخيارات ذات الصلة في مكان ما قبل تصميم الوسيطة الخاصة بك (مثل application.rb ) ونقلها إلى الوسيطة المفضلة لديك ، مثل هذا:
application.rb:
config . session_store :cookie_store , key : '_interslice_session'
config . middleware . use ActionDispatch :: Cookies # Required for all session management
config . middleware . use ActionDispatch :: Session :: CookieStore , config . session_options(شكرًا mltsy)
يدعم Omniauth مسجلًا قابل للتكوين. افتراضيًا ، ستسجل Omniauth إلى STDOUT ولكن يمكنك تكوين هذا باستخدام OmniAuth.config.logger :
# Rails application example
OmniAuth . config . logger = Rails . logger عادةً ما يتم استخدام معلمة URL origin لإبلاغ من أين جاء المستخدم وأين ، إذا اخترت استخدامه ، فإنهم يرغبون في العودة إليه. يدعم Omniauth الإعدادات التالية التي يمكن تكوينها على مستوى المزود:
تقصير :
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ]
POST /auth/twitter /?o rigin = [ URL ]
# If the `origin` parameter is blank, `omniauth.origin` is set to HTTP_REFERERباستخدام معلمة Origin المسمى بشكل مختلف :
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ] , origin_param : 'return_to'
POST /auth/twitter /?r eturn_to = [ URL ]
# If the `return_to` parameter is blank, `omniauth.origin` is set to HTTP_REFERERعاجز :
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ] , origin_param : false
POST /auth/twitter
# This means the origin should be handled by your own application.
# Note that `omniauth.origin` will always be blank. حافظت Omniauth Wiki بنشاط على وثائق متعمقة لـ Omniauth. يجب أن تكون محطتك الأولى إذا كنت تتساءل عن نظرة أكثر تعمقًا على Omniauth ، وكيف تعمل ، وكيفية استخدامها.
متاح كجزء من اشتراك Tidelift.
يعمل مشرفي Omniauth وآلاف الحزم الأخرى مع Tidelift لتقديم الدعم والصيانة التجارية للحزم مفتوحة المصدر التي تستخدمها لبناء تطبيقاتك. وفر الوقت ، وتقليل المخاطر ، وتحسين صحة التعليمات البرمجية ، مع دفع المشرفين على الحزم الدقيقة التي تستخدمها. يتعلم أكثر.
يتم اختبار Omniauth تحت 2.5 و 2.6 و 2.7 و 3.0 و 3.1 و 3.2 و Tuffleruby و Jruby.
تهدف هذه المكتبة إلى الالتزام بالإصدار الدلالي 2.0.0. يجب الإبلاغ عن انتهاكات هذا المخطط باعتبارها الأخطاء. على وجه التحديد ، إذا تم إصدار إصدار ثانوي أو تصحيح يكسر التوافق للخلف ، فيجب أن يتم انتزاع هذا الإصدار فورًا و/أو إصدار إصدار جديد على الفور يعيد التوافق. لن يتم تقديم التغييرات في واجهة برمجة التطبيقات العامة إلا مع إصدارات رئيسية جديدة. نتيجة لهذه السياسة ، يمكنك (وينبغي) تحديد الاعتماد على هذه الأحجار الكريمة باستخدام قيد الإصدار المتشائم مع رقمين من الدقة. على سبيل المثال:
spec.add_dependency 'omniauth', '~> 1.0'
حقوق الطبع والنشر (C) 2010-2017 Michael Bleigh و Indridea ، Inc. راجع الترخيص للحصول على التفاصيل.