كيف يجب أن تبدو بنية الجدول عند إضافة تسجيل دخول مصادقة مفتوح إلى نموذج المستخدم

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

سؤال

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

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

id
twitter_token
twitter_screenname
twitter_secret
twitter_pic
facebook_token
facebook_secret
facebook_pic
facebook_name
google_token
google_secret
google_name
etc.

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

user_id
token
secret
social_type  # foreign key to a social_site look up table
social_pic

وسيبدو جدول النوع الاجتماعي كما يلي:

id
social_site_name
oauth_url

الجانب السلبي الوحيد لهذا النهج هو أنني يجب أن أقوم بتعميم ما سأقوم بتخزينه حول جميع الخدمات.كيف تقومون بذلك يا شباب؟ربما تكون STI مرتبة هنا... حيث سيكون هناك فئة لكل نوع من أنواع تسجيل الدخول والتي ترث من فئة تسجيل الدخول الأساسية.

شكرًا!

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

المحلول

أود أن أقترح شيئا مثل هذا:

  • كل مستخدم يمكن أن يكون لها الكثير تسجيلات الدخول, ، كل تسجيل الدخول ينتمي إلى واحد مستخدم فقط.
  • تسجيلات الدخول هي من محددة يكتب, ، واحد تسجيل الدخول هو واحد يكتب فقط.
  • SocialLogin يحتوي الجدول على حقول مشتركة للجميع أنواع تسجيل الدخول, Google, FaceBook و Twitter تحتوي الجداول على حقول خاصة بكل منها.

login_model_01

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