2017-02-19 25 views
11

Pracuję nad aplikacją mobilną i obecnie w zależności od JWT utrzymuję bezpaństwowość interfejsu API. Interfejs API jest wykorzystywany przez urządzenia przenośne i urządzenia internetowe. Użytkownicy będą używać swojego adresu e-mail i hasła do rejestracji.Laravel 5.3 - Wątpliwości związane z loginem społecznościowym

Zostałem przydzielony do wdrożenia opcji logowania społecznościowego w tym interfejsie API. Chciałbym wyjaśnić moje następujące wątpliwości.

1) Kiedy jest używane logowanie społecznościowe, w jaki sposób mogę wygenerować token [taki jak JWT], który będzie przechowywany po stronie klienta? Ten token ma wysyłać wszystkie kolejne żądania po zalogowaniu.

2) W przypadku, gdy platformy społecznościowe nie udostępniają/udostępniają adresu e-mail [który jest jednym z naszych kluczy głównych], jakie informacje powinienem przechowywać?

+0

Społeczny login służy tylko do weryfikacji, kto jest uwierzytelniony. Nadal będziesz miał rekord użytkownika w bazie danych dla tego konkretnego użytkownika. Więc po zalogowaniu się utworzysz JWT w taki sam sposób jak zawsze. Na jakiej platformie martwisz się, że nie podasz adresu e-mail? Prawie każda usługa będzie miała jakiś identyfikator użytkownika, więc twoja tabela użytkownika może zawierać pola takie jak 'facebook_id'' twitter_id' itd. – Pitchinnate

+0

Większość platform społecznościowych udostępnia ci adres e-mail (z wyjątkiem Twittera, który wierzę). Zakładam, że możesz wykonać przekierowanie do swojej aplikacji po udanym obiegu w obiekcie internetowym. –

+0

@logeeks znalazłeś odpowiedź na swoje pytanie? –

Odpowiedz

1

krótka odpowiedź

  1. Trzeba połączyć społecznej logowania użytkownika do standardowej tabeli użytkownika i wygenerować (JWT) token jak już robisz
  2. loginów społeczne zawsze zwraca identyfikator identyfikujące użytkownik na portalu społecznościowym. W tabeli zewnętrznej, przechowywać zużytą społecznej i social_id wraz z user_id was głównej tabeli użytkowników

długa odpowiedź

Zacznijmy od początku, aby mieć lepszy zobacz całą sprawę i wyjaśnij wszystkie aspekty twoich wątpliwości.

Podstawowa tabela użytkownik
Zazwyczaj masz tabelę Users skonstruowany w ten sposób (uproszczony)

  • user_id
  • login (e-mail)
  • hasło
  • jwt_token

Gdy użytkownik się zaloguje , zaktualizujesz pole jwt_token i zwrócisz je użytkownikowi, aby mógł korzystać z twoich interfejsów API.

wykonawcze loginy społeczne
Dobrym podejściem do dodawania loginów społecznych jest stworzenie nowej tabeli social_logins zorganizowany następująco (uproszczone)

  • społeczny
  • social_id
  • USER_ID

Gdy użytkownik "zaloguje się" jako użytkownik, otrzyma listę danych sama sieć. Pamiętaj, że użytkownicy mogą zabronić pobierania prywatnego adresu e-mail (np. Z Facebooka), nawet jeśli wyraźnie o to prosisz.

Pierwszą rzeczą, którą musisz zrobić, to sprawdzić, czy społeczność zwróciła Ci adres e-mail użytkownika.

  • jeśli e-mail wrócił, poszukaj użytkownik z tego adresu e-mail w swojej tabeli użytkowników i utworzyć rekord w „social_logins” stół tworząc relację z użytkownikiem przy użyciu pola user_id
  • czy e-mail jest pusty , musisz utworzyć nowego użytkownika w tabeli użytkownika, tworząc "fałszywy" adres e-mail (przy użyciu standardowej metody - nie losowej), a następnie utwórz rekord społecznościowy

Aby uniknąć tworzenia podwójnych użytkowników (różne adresy e-mail) , Zawsze wolę poprosić użytkownika o potwierdzenie swojego adresu e-mail: za pomocą tego prostego pytania możesz odłożyć poprzedni czek i zmniejszyć liczbę podwójnych użytkowników. Jeśli więc login społecznościowy nie zwraca adresu e-mail, po prostu wyświetlasz puste pole, prosząc użytkowników o wypełnienie go swoim adresem e-mail, którego użyjesz do znalezienia użytkownika w tabeli użytkowników. Jeśli go masz, po prostu pokaż użytkownikowi to samo wypełnione pole i poproś go o potwierdzenie adresu e-mail lub zmień go, jeśli woli użyć innego adresu lub jeśli jest już zarejestrowany w aplikacji z innym adresem e-mail.

+0

W tym dniu na sitepoint napisano naprawdę fajny artykuł za pomocą Laravel Socialite https://www.sitepoint.com/easily-add-social-logins-to-your-app-with-socialite/ –

0

Niektóre sieci społecznościowe umożliwiają delegowanie uwierzytelniania użytkowników zamiast żądać danych uwierzytelniających w swoim systemie. Gdy użytkownik się zaloguje, platforma zewnętrzna udostępni token dostępu, który może zostać wykorzystany do uzyskania informacji o użytkowniku.

Użyj tych danych, aby zarejestrować użytkownika we własnym systemie. Dołącz także dostarczony token dostępu. W zależności od żądanych uprawnień możesz użyć tokena do wykonania dodatkowej operacji na platformie społecznościowej.

Następnie wydaj JWT, który będzie używany jako token uwierzytelniający w aplikacji internetowej/mobilnej, w której zalogowany jest użytkownik. Pamiętaj, że ta JWT musi być niezależna od tokenu dostępowego wysłanego przez dostawcę uwierzytelniania. Dołącz niektóre oświadczenia o zainteresowaniach, takie jak sub lub exp i podpisz je tajnym kluczem. Na przykład

{ 
    "sub": "userid",  //unique user id assigned in your system 
    "name": "User name" //Name provided by social 
    "iss": "issuer",  //you are the issuer 
    "exp": 1300819380, //Expiration date 
    "login":"facebook" //login method used 
    } 

Jeśli zamierzasz korzystać z kilku systemów uwierzytelniania, takich jak Google czy Facebook, nie używać e-mail jako unikalny identyfikator, ponieważ może różny dla tego samego użytkownika. Będziesz potrzebować dodatkowego procesu rejestracji, aby połączyć konta, które użytkownik ma w różnych sieciach. Na przykład, pozwolenie użytkownikowi na ustawienie identyfikatora używanego w innym systemie lub po prostu uruchomienie procesu logowania na Twitterze, gdy użytkownik jest zalogowany przez Facebook