تطبيقات متعددة تستخدم Authlogic، وتوثيق المستخدمين في قاعدة بيانات واحدة؟

StackOverflow https://stackoverflow.com/questions/1631586

  •  06-07-2019
  •  | 
  •  

سؤال

لقد رأيت السؤال المطروح عدة مرات في مجموعات Google ولكن يبدو أن لا أحد يتابعه بإجابة أو حل..هل من الممكن استخدام قاعدة بيانات مركزية لإنشاء المستخدم والمصادقة من تطبيقات Rails المتعددة باستخدام Authlogic؟

لا يتوفر لي خيار استخدام OpenID في الوقت الحالي، وأنا أرغب في ذلك ولكن عميلي لا يدعمه حتى الآن.

هل كانت مفيدة؟

المحلول

ويبدو أن هناك ما زالت لم يكن حلا نشرها إلى السؤال الأصلي.

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

وكنت بالفعل باستخدام Authlogic لبعض المشاريع الأخرى، لذلك كان على أمل أن تكون بسيطة مثل تغيير بعض إعدادات التكوين.

وهنا بلدي الحل:

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

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

config.action_controller.session = {
  :session_key => '_my_app_session',
  :secret      => '_long_secret_session_key_here',
  :domain => ".basedomain.com" 
}

وكل من التطبيقات بلدي هي تحت فرعي الخاصة بهم، مثل app1.basedomain.com app2.basedomain.com أنا لست متأكدا إذا كان هذا سيعمل على خلاف ذلك دون بعض المزيد من التغييرات.

في كل تطبيق، إنشاء UserSession

class UserSession < Authlogic::Session::Base   
end

وونماذج العضو.

class User < ActiveRecord::Base
   establish_connection "users_database"
   acts_as_authentic 
end

ما هو مختلف في هذا النموذج العضو هو أن لديها الآن طريقة تأسيس اتصال. و"users_database" في الملف database.yml ويشير إلى قاعدة بيانات لتطبيق إدارة المستخدم المركزية.

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

في كل تطبيق يستخدم مصادقة، وتضمنت بعض الأساليب المساعد في ApplicationController، على سبيل المثال،

   def current_user_session
      return @current_user_session if defined?(@current_user_session)
      @current_user_session = UserSession.find
   end

   def current_user
      return @current_user if defined?(@current_user)
      @current_user = current_user_session && current_user_session.record
   end

   def require_user
     unless current_user
       store_location
       redirect_to 'http://main_user_login_page'
       return false
     end
   end

وبعد ذلك يمكنني استخدام 'require_user "في التحكم الخاص بي حيث كنت تريد المصادقة تماما مثل أستطيع في تطبيق المستخدم الرئيسي بلدي.

ويساعد هذا الأمل.

وتشيس M رمادي

نصائح أخرى

من وجهة نظر تصميم، هل فكرت في إنشاء نظام مخصص للتعامل مع معلومات المستخدم والتوثيق. بعد ذلك التطبيقات الأخرى الخاصة بك الاتصال لهذا النظام من خلال API آمن، وعلى الأرجح الداخلية. يمكنك الاحتفاظ قواعد البيانات فصلها، والحفاظ على قاعدة بيانات المستخدم آمنة من خلال السماح فقط الوصول من خلال API.

الإجابة القصيرة هي نعم." بالتأكيد.لا تختلف مشاركة نموذج المستخدم بين التطبيقات بشكل أساسي عن مشاركة أي منها آخر نوع النموذج بين التطبيقات.حسنًا، من المحتمل أن تتمكن من سحب بيانات المستخدم الخاصة بك عبر REST باستخدام ActiveResource إذا كنت لا تمانع في أن تكون بطيئة بعض الشيء.

ولكن إذا لم تكن Authlogic والحلول المشابهة لها قيدًا تجاريًا مقيدًا، فهناك طرق أخرى للتعامل مع SSO (الدخول الموحد) إلى جانب OpenID فقط.نلقي نظرة على روبيكاس, رائد فضاء (ربما مع الدار البيضاء للعميل)، أو لنهج مختلف تماما، هانكوك.

وأعتقد أن أفضل طريقة yould تكون لتنفيذ رض النظام.
انها تريد ان تسمح للمستخدمين لمصادقة ليس فقط على التطبيقات الخاصة بك ولكن في أي مكان تقريبا مع تسجيل الدخول وكلمة المرور.

وشخصيا أنا لا أحب رض، والناس يميلون الى الاعتقاد انها قليلا أكثر أمنا مما هو عليه.

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

والمشكلة الوحيدة هي أن أرى لا يمكنك مشاركة جدول واحد فقط بين التطبيقات، افتراضيا، سيكون لديك لاستخدام <م> نفس قاعدة البيانات لجميع التطبيقات الخاصة بك ، لا لا.

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

[1]: http://github.com/fiveruns/data_fabric data_fabric

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top