Database
 sql >> база данни >  >> RDS >> Database

Влизане с външни услуги

Въвеждането на потребителско име и парола е един от начините за достъп до акаунт, но не е единственият. В тази статия ще видим как да активирате външни услуги (като Google или Facebook), когато влизате в база данни.

Какво представляват входовете за външна услуга?

Предоставянето на възможност на потребителя за достъп до системните си акаунти чрез външни услуги е нарастваща тенденция сред уеб дизайнерите. Тази опция може да осигури няколко предимства, като например да даде на потребителите една комбинация от име и парола по-малко, която да запомнят. Също така може да помогне на администраторите да персонализират потребителското изживяване.

Когато уеб приложенията предлагат вход от външна услуга, екранът за влизане изглежда като снимката по-долу. Потребителят може да въведе своето потребителско име и парола или да щракне върху бутон, който ще го пренасочи към избраната от него услуга (Facebook, Twitter, Google и др.), където ще влезе и ще бъде пренасочен към оригиналното приложение.

Ето примерен екран за влизане от Vertabelo Academy:

Как работят външните входове

Добавянето на външни услуги за влизане изисква известна допълнителна работа от разработчиците. Повечето популярни социални медийни услуги използват протокол, наречен OAuth 2.0 . Само Twitter използва по-стар протокол, наречен OAuth 1.0 . Протоколът позволява четене на потребителска информация като пълното им име, имейл, пол и т.н. Точната налична информация зависи от услугата на социалните медии и каквото и да е предоставил потребителят. (Например, възможно е да имате акаунт във Facebook без прикачен имейл адрес.) Независимо от това обаче, ние ще се съсредоточим върху това как да внедрим тази система в дизайна на база данни.

Като отправна точка ще използваме предишната ни статия за възстановяване на парола и потвърждение на имейл като основа. Ето таблиците, свързани с потребителите от тази статия.




Проектиране на база данни за външни влизания

Много информация в user_account таблицата е свързана с обработката на удостоверяване - плюс свързани функции като напомняне на парола и потвърждение по имейл - самостоятелно. Нямаме нужда от тези колони, ако потребителят се удостоверява с външна услуга. Напомнянето на паролата, потвърждението по имейл и други функции се обработват от външната услуга. Първата стъпка в нашия дизайн е да отделим user_account таблица в две таблици:user_account и user_profile .

user_account table вече обработва цялото си собствено счетоводство за удостоверяване. user_profile таблицата представя действителната информация за потребителя:име, имейл, часова зона, условия за приемане на услугата и т.н. Всички бизнес таблици вече трябва да са свързани с user_profile таблица.

Сега към външните сметки. OAuth протоколът в крайна сметка ни дава идентификатор за потребителя в тяхната система. Този идентификатор не е името на потребителя във външната система. Това е просто идентификатор за нашето приложение. Трябва да съхраняваме този вътрешен идентификатор в нашата база данни. Можем да добавим колони с нула facebook_id , google_id , twitter_id и т.н. към таблицата user_profile . Но ние ще направим нещо различно.

Ще добавим нови таблици:facebook_account , twitter_account , google_account , който ще съхранява външния идентификатор. По този начин, ако трябва, можем да добавим допълнителна информация специално за всеки социален уебсайт. Ако искаме да добавим възможност за влизане за друг социален уебсайт, няма да се налага да променяме user_profile маса. Ще добавим само още един external_service_account таблица.

Всяка от новите таблици споделя същия формат на колона. Един от тях ще бъде int user_profile_id , който едновременно е външен ключ, препращащ колоната с идентификатор в user_profile таблица и първичен ключ. (Това може да служи като първичен ключ, защото нито един акаунт в нашата система не трябва да се свързва с множество акаунти на една и съща външна услуга.)

Другата колона ще бъде идентификаторът на външния акаунт – facebook_id , например. Има уникално ограничение за всеки от facebook_id , google_id и twitter_id колони. Знаем, че няма два акаунта с един и същ идентификатор. Всъщност, когато потребителят е удостоверен с външна услуга, ние знаем техния facebook_id . Когато намерим съответния ред в facebook_account таблица и намерете правилния user_profile , знаем кой потребител току-що е влязъл в системата. Ако няма ред с този идентификатор, създаваме нов ред в user_profile таблица и нов ред в съответната таблица на акаунта.

Ето последния модел:





  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преброяване на препратки към запис в таблица чрез външни ключове

  2. Как да добавяте позиции за класиране към редове с DENSE_RANK() в SQL

  3. SQL Self Join

  4. SQL справочник за начинаещи

  5. Използване на JavaFX таблици за организиране на данни