2011-09-04 15 views
12

Chcę umożliwić użytkownikom logowanie się do mojej witryny przy użyciu konta Facebook lub Twitter, ale jeśli nie mają konta, to należy zarejestrować nowe konto i użyć podstawowe logowanie do mojej strony.OAuth (Facebook, Twitter) i podstawowe logowanie - tabela użytkowników

Ale jak moi użytkowników tabela wygląda następująco:

Mój pomysł:

  • id (podstawowy, automatycznego przyrostu)
  • podając nazwę użytkownika (w przypadku OAuth logowania => ouath_provider + oauth_id , ex: fb_100001557958700)
  • hasło (hasło wybrane przez użytkownika lub losowo wygenerowane w przypadku oauth)
  • nazwa (nazwa dla displ ay)

Co sądzisz? Czy powinienem mieć 2 tabele, 1 dla podstawowego logowania i 1 dla logowania oauth? Ale w jaki sposób użytkownicy mają unikalne identyfikatory?

Z góry dzięki za komentarze.

Odpowiedz

17

Z mojego doświadczenia najlepiej przechowywać swoje autoryzacje w jednej tabeli, a dane użytkownika w drugiej.

autoryzacje:

network  - Varchar(255) #Twitter/Facebook/Openid/whatever 
network_id - varchar(255) #Users id for that social network. 
user_id  - int 

użytkowników:

id (primary, auto increment) 
name 
password 
username 

Dzięki tej strukturze, jeśli chcesz, aby ten sam użytkownik, aby zalogować się zarówno z Twitter i Facebook w pewnym momencie w przyszłości, to jest również możliwe.

+1

w przypadku OAuth, jaka jest nazwa użytkownika i hasło użytkownika? Czy jest to wartość NULL lub coś wygenerowanego, czy też użytkownicy muszą zawsze wybierać nazwę użytkownika i hasło? –

+2

Idealnie byłoby, gdyby użytkownik zarejestrował nazwę użytkownika (która może być automatycznie wypełniana od dostawcy oauth) i hasło. Daje to rezerwę, jeśli użytkownik zostanie zablokowany ze swojego konta na Twitterze lub Facebooku. – Gazler

+0

przepraszam @Gazler, ale co z polem "user_id"? co ona reprezentuje w tym kontekście? Mam na myśli, czy jest to obcy klucz do tabeli użytkowników? – Atieh

2

Tak wygląda mój stół użytkownika.

  • USER_ID (podstawowy, automatycznego przyrostu)
  • oauth_provider (enum (brak, twitter, facebook))
  • oauth_uid
  • nazwa
  • hasło
  • itp

Każdy czas rejestracji użytkownika przez Facebook/Twitter, nowy wpis jest wstawiany z rekordem hasła jako null ofcourse.

Myślę, że jest to dobry sposób, aby to zrobić, ponieważ masz 1 unikalny identyfikator użytkownika, którego możesz użyć w całej aplikacji/bazie danych.

+0

Dzięki dandoen. A jaka jest nazwa użytkownika w przypadku rejestracji na Facebooku/Twitterze? Czy jest pusty? –

+0

Nie, kiedy użytkownicy rejestrują się na Facebooku/Twitterze, mogą już mieć tam swoją nazwę użytkownika. W przypadku Facebooka, który jest polem 'nazwa_użytkownika' oraz w przypadku Twittera, jest to pole' nazwa_pliku'. – dandoen

+0

@dandoen Ale problem polega na tym, że tylko "rodzime" konta mają hasło, pliki utworzone za pomocą Twittera itp. Nie mają. Prowadzi to do pustych pól hasła w db, co prowadzi do potencjalnych hacków, ponieważ nazwa użytkownika i hasło == "" (to wymaga BARDZO silnej architektury kodu) – Sliq

Powiązane problemy