Skip to content

Commit a75cf28

Browse files
committed
authentication post added
1 parent bfef426 commit a75cf28

File tree

4 files changed

+104
-0
lines changed

4 files changed

+104
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
---
2+
layout: post
3+
title: "Authentication"
4+
date: 2019-03-25
5+
categories: ["Firebase"]
6+
image: firebase/authentication
7+
description: "Firebase"
8+
keywords: "firebase, autentykacja, autoryzacja, authentication, account, user, email, password, phone, google, facebook, twitter, github, rejestracja, logowanie, sign in, log in, sign up, log out, android, programowanie, programming"
9+
---
10+
11+
## Wprowadzenie
12+
Tworzenie i zarządzania kontem użytkownika to dla większości aplikacji podstawowa funkcjonalność, która pozwala na personalizowane wykorzystanie funkcjonalności aplikacji, a znajomość tożsamości ułatwia bezpieczne zapisywanie i powiązanie danych z kontem synchronizowanym na różnych urządzeniach. `Firebase Authentication` dostarcza łatwych w użyciu usług `backend` przeznaczonych do uwierzytelniania użytkowników w aplikacji za pomocą `hasła`, `numeru telefonu`, popularnych dostawców tożsamości typu `Google`, `Twitter`, `Facebook`, `Github` oraz umożliwia integracje z innymi zewnętrznymi usługami. Wykorzystuje także popularne standardy branżowe takie jak `OAuth 2.0` i `OpenID Connect` oraz ściśle współpracuje z innymi usługami Firebase. Operacje procesu uwierzytelniania mogą odbywać się poprzez użycie gotowych komponentów interfejsu użytkownika (`FirebaseUI`) lub wykorzystując `Firebase SDK` do ręcznej konfiguracji.
13+
14+
## Użytkownicy
15+
Obiekt `Firebase User` reprezentuje konto użytkownika zarejestrowanego w aplikacji w projekcie Firebase. Do użytkownika przypisany jest zestaw podstawowych właściwości takich jak: unikalny identyfikator, podstawowy adres email, nazwa i adres URL zdjęcia, które są przechowywane w bazie danych projektu i mogą być aktualizowane. Nie ma możliwości dodania bezpośrednio innych właściwości do obiektu w bazie danych projektu, zamiast tego należy przechowywać dodatkowe właściwości w bazie danych `Firebase Realtime Database`. Przy pierwszej rejestracji do aplikacji profil użytkownika zostanie uzupełniony o dostępne informacje w zależności od udostępnionych danych przez dostarczyciela, np. przy rejestracji adresem email i hasłem zostanie dodany tylko podstawowy adres email. Użytkownik może zalogować się na to samo konto za pomocą różnych metod np. używając adresu email i hasła, konta Google czy konta Twitter. W momencie pomyślnej rejestracji lub logowania następuje przypisanie instancji `Firebase Auth` dla bieżącego użytkownika, której zadaniem jest utrzymanie stanu użytkownika do momentu wylogowania, np. ponowne uruchomienie aplikacji nie powoduje utraty informacji.
16+
17+
## FirebaseUI
18+
`FirebaseUI` jest biblioteką opartą o pakiet `SDK Firebase Authentication`, która dostarcza komponenty interfejsu graficznego umożliwiające w łatwy sposób wykonanie operacji autoryzacji. Już za pomocą jednego kliknięcia możliwe jest zalogowanie się do aplikacji przy użyciu wielu dostarczycieli (email, telefoniczna autoryzacja, `Google Sign-In` itp) czy też wywołanie różnych metod uwierzytelniania i zadań zarządzania kontem. FirebaseUI automatycznie integruje się z mechanizmem `Smart Lock for Password` i pozwala także na personalizacje stylu graficznego. Aby skorzystać z wybranych dostarczycieli autoryzacji należy dodać odpowiednie zewnętrzne zależności do pliku `build.gradle`, włączyć wspieranie logowania i uzupełnić wymagane informacje w konsoli Firebase oraz dla Facebook i Twitter dodać klucz aplikacji do zasobów tekstowych. Poniższy listing przedstawia sposób wykorzystanie FirebaseUI w procesie logowania, wylogowania i usuwania konta.
19+
20+
{% highlight kotlin %}
21+
class FirebaseUIActivity : AppCompatActivity() {
22+
23+
companion object {
24+
const val SIGN_IN = 100
25+
}
26+
27+
override fun onCreate(savedInstanceState: Bundle?) {
28+
super.onCreate(savedInstanceState)
29+
setContentView(R.layout.activity_firebase_ui)
30+
31+
//add available providers
32+
val providers = arrayListOf(
33+
AuthUI.IdpConfig.EmailBuilder().build(),
34+
AuthUI.IdpConfig.PhoneBuilder().build(),
35+
AuthUI.IdpConfig.GoogleBuilder().build(),
36+
AuthUI.IdpConfig.TwitterBuilder().build())
37+
38+
//start sign in screen and optional customize by logo, theme and urls
39+
val intent = AuthUI.getInstance()
40+
.createSignInIntentBuilder()
41+
.setAvailableProviders(providers)
42+
.setLogo(R.drawable.logo)
43+
.setTheme(R.style.AppTheme)
44+
.setTosAndPrivacyPolicyUrls("http://androidcode.pl/terms", "http://androidcode.pl/privacy")
45+
.build()
46+
startActivityForResult(intent, SIGN_IN)
47+
}
48+
49+
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
50+
super.onActivityResult(requestCode, resultCode, data)
51+
if (requestCode == SIGN_IN) {
52+
val response = IdpResponse.fromResultIntent(data)
53+
if (resultCode == Activity.RESULT_OK) {
54+
//success, get user and do some work
55+
val user = FirebaseAuth.getInstance().currentUser
56+
startActivity(Intent(this, UserActivity::class.java))
57+
}
58+
else {
59+
//fail, show some error message
60+
}
61+
}
62+
}
63+
}
64+
65+
class UserActivity : AppCompatActivity() {
66+
67+
override fun onCreate(savedInstanceState: Bundle?) {
68+
super.onCreate(savedInstanceState)
69+
setContentView(R.layout.activity_user)
70+
71+
signOut.setOnClickListener {
72+
AuthUI.getInstance().signOut(this)
73+
.addOnCompleteListener {
74+
//do something like navigate to home screen
75+
}
76+
}
77+
78+
delete.setOnClickListener {
79+
AuthUI.getInstance().delete(this)
80+
.addOnCompleteListener {
81+
//do something like navigate to home screen
82+
}
83+
}
84+
}
85+
86+
//more methods
87+
}
88+
{% endhighlight %}
89+
90+
## Firebase SDK
91+
Kiedy zachodzi potrzeba przejęcia większej kontroli nad procesami uwierzytelniania należy w tym celu wykorzystać `Firebase SDK`, który umożliwia zdefiniowanie zachowania i obsługę zdarzeń na każdym kroku danego procesu. Poniższy listing prezentuje wykorzystanie Firebase SDK w procesie rejestracji za pomocą email i hasła, logowania i wylogowania użytkownika.
92+
93+
{% highlight kotlin %}
94+
//TODO code
95+
{% endhighlight %}
96+
97+
Co więcej istnieje możliwość ręcznej konfiguracji zewnętrznych API autoryzacji dla m.in. Google, Twitter, Facebook, Github i integracji z kontem użytkownika Firebase. Ponadto Firebase Authentication oferuje także mechanizm uwierzytelniania kont anonimowych i ich konwersji do kont stałych oraż możliwość logowania się za pomocą linka w wiadomości email.
98+
99+
## Zarządzanie użytkownikami
100+
Firebase Authentication poza podstawowymi właściwościami użytkownika Firebase umożliwia także uzyskanie dostępu do informacji profilowych dostarczonych przez zewnętrznych usługodawców autoryzacji. Ponadto możliwe jest dodanie lub zmiana bieżących danych (informacje profilowe, email, hasło, itp), a także usuwanie konta oraz wysyłanie maili zmiany hasła, weryfikacji czy ponownej autoryzacji konta.
101+
102+
{% highlight kotlin %}
103+
//TODO code
104+
{% endhighlight %}
1.02 MB
Loading
19.4 KB
Loading
67.9 KB
Loading

0 commit comments

Comments
 (0)