SolutionCode / WinkBackend

Simple 1:1 communication platform.
1 stars 0 forks source link

Logowanie #4

Closed dzida closed 9 years ago

dzida commented 9 years ago

Logowanie użytkownika polega na utworzeniu tokena dostępowego oraz zwrócenie go. Logowanie ma osobne metody API dla każdego sposobu logowania (FB, username)

W przypadku poprawnej walidacji zwracamy token dostępowy. Jeżeli istnieje już token dostępowy zwracamy istniejący.

sacherus commented 9 years ago

Zwykle logowanie (nie facebook): Trzeba w poscie wyslac:

POST /o/token/ HTTP/1.1 Host: localhost:9000 Content-Length: 66 Accept-Encoding: gzip, deflate Accept: / User-Agent: HTTPie/0.9.2 Connection: keep-alive Content-Type: application/x-www-form-urlencoded; charset=utf-8 Authorization: Basic dGVzdDp0ZXN0

grant_type=password&username=sacherus.spam%40gmail.com&password=a

http --form POST http://localhost:8000/o/token/ grant_type=password username=a@a.com password=a -a"test:test1" zly client/client id: HTTP/1.0 401 UNAUTHORIZED { "error": "invalid_client" }

http --form POST http://localhost:8000/o/token/ grant_type=password username=b@a.com password=a -a"test:test1" zly uzytkownik/haslo HTTP/1.0 401 UNAUTHORIZED { "error": "invalid_grant", "error_description": "Invalid credentials given." }

zly grant type http --form POST http://localhost:8000/o/token/ grant_type=abc username=a@a.com password=a -a"test:test" HTTP/1.0 400 BAD REQUEST { "error": "unsupported_grant_type" }

Wszystko ok: HTTP/1.0 200 OK { "access_token": "OHCnlqu9mKtRRR5hMEIYFtIfswIOWf", "expires_in": 36000, "refresh_token": "bGX6IQBWBNjK7OLbAgJZbZqwnjmAH9", "scope": "read write", "token_type": "Bearer" }

sacherus commented 9 years ago

Facebook logowanie/rejestracja:

Przez GET: http://localhost:8000/users/register-by-token/facebook/?access_token=CAAUshhSyCnEBAEKEJzIamQagx4JCeVuL63ZClScxZAV4RC3FPZA1BNNVbkcsL0xuQv7uUXFy5VY1xMFzteZByyC9qAEMVUn8pHzm7BozzjfZAEFF42VS4AcLSVM0VUTIzovqmsHsHhkPGMyDrT9ytFVu5z49IJQ0xXRCgoYC4Bl4jEOliosuqZAXzESq90bShTictvzZCfTOHBbK5sqca6n

Zly token: 400 Client Error: Bad Request + debug django TODO: poprawic komunikat bledu

Wszystko ok: HTTP/1.0 200 OK { "access_token": "OHCnlqu9mKtRRR5hMEIYFtIfswIOWf", "expires_in": 36000, "refresh_token": "bGX6IQBWBNjK7OLbAgJZbZqwnjmAH9", "scope": "read write", "token_type": "Bearer" }

dzida commented 9 years ago

Musimy się zastanowić jak połączyć rejestracje z tworzeniem profilu użytkownika. Część danych (np. handle) musi pochodzić z formularza w aplikacji natywnej.

Od strony API mozna zrobić jedno API do tworzenia usera, które przyjmie także dane na temat logowania lub rozbic to na kilka metod API (preferowałbym jedną metodę). Rozważyłbym też taki model działania, w którym to aplikacja kliencka pobiera z platformy społecznościowej wymagane informacje z profilu i sama formuję request do naszej aplikacji zawierający wszystki potrzebne do stworzenia usera informacje + dane dot. logowania (w przeciwieństwie do wydobywania informacji o profilu usera po stronie serwera).

Pytania:

  1. Czy GET jest poprawną metodą do rejestracji użytkownika?
sacherus commented 9 years ago

Tez sie nad tym zastanawialem, wszystkie flowy sa takie, ze serwer wywoluje zapytania w imieniu klienta... Zeby zczytac na telefonie dane uzytkownika trzeba zakodowac secret id w Androidzie.

Myslalem o rozwiazaniu, zeby serwer staral sie wypelnic wszystko tj. handle i display name np. Laczac imie i nazwisko....

A pozniej uzytkownik by to poprawial na drugim oknie... aktualizujac juz normalnie dane profilowe.

Odp.

  1. Faktycznie lepiej zamienic to na post.

Pytania:

  1. Do czego sluzy handle? Bo zamienilem to na username, zeby latwiej testwoac python social auth. 2.wrzucamy gdzies serwer np. Heroku?
sacherus commented 9 years ago

Zamkniete w #22 pull request. Dodam API to wiki.