Продолжаем работать с Firebase. В этом уроке будем тестировать сервис аутентификации. Идентификация пользователей необходима в большинстве приложений. Это позволяет разделять доступ, надежно хранить личные данные пользователей в облаке и обеспечить персонализированный опыт на всех устройствах пользователя.

Firebase предоставляет бэкенд, простой в использовании SDK и готовые библиотеки пользовательского интерфейса для реализации аутентификации пользователей в вашем приложении. Он поддерживает аутентификацию как с помощью email и пароля, так и с помощью таких популярных поставщиков идентификации, как Google, Facebook, Twitter и GitHub.

Сервис аутентификации тесно интегрируется с другими сервисами Firebase, использует отраслевые стандарты, такие как OAuth 2.0 и OpenID Connect, так что он может быть легко интегрирован с вашим бэкэндом. Сегодня мы рассмотрим метод аутентификации пользователей с помощью адреса электронной почты и пароля. Firebase Authentication SDK предоставляет методы для создания и управления пользователями, которые используют адреса электронной почты и пароли для входа в систему.

Будем использовать пример, созданный разработчиками Firebase на GitHub. Для этого клонируйте или скачайте репозиторий и откройте проект с именем auth в Android Studio.

Чтобы интегрировать проект с Firebase, откройте меню Tools/Firebase и в окне ассистента выберите Authentication. нажмите кнопку в шаге 1, чтобы связать ваше приложение с Firebase.

2016-11-05_13-31-31

В случае успеха в консоли Firebase вы увидите новый проект с именем auth. Зайдите в него и выберите слева пункт меню Authentication. На вкладке «Способ входа» включите пункт «Адрес электронной почты/пароль».

2016-11-05_13-33-19

В процессе регистрации пользователей в приложении информация о них будет появляться на вкладке «Пользователи». Здесь можно управлять пользователями — например, добавить пользователя в базу приложения, а также отключить или удалить пользователя.

Вернемся к проекту в Android Studio. Если вы видите в консоли ошибки — сделайте ребилд проекта.

Нас интересует EmailPasswordActivity. Это активити связано с файлом макета экрана activity_emailpassword.xml. Давайте посмотрим его структуру. Здесь расположены логотип Firebase, информационные текстовые поля, поля ввода email и пароля, а также кнопки входа и создания аккаунта. Это весь пользовательский интерфейс.

Откроем класс EmailPasswordActivity. Он унаследован от класса BaseActivity, который в свою очередь является наследником AppCompatActivity. Это сделано только для того, чтобы инкапсулировать методы отображения и скрытия окна ProgressDialog, которое вызывается при ожидании ответа сервера, и сократить таким образом код.

В классе EmailPasswordActivity мы наблюдаем объявление элементов пользовательского интерфейса, а также объекта класса FirebaseAuth и его слушателя AuthStateListener.

Класс FirebaseAuth — это точка входа в Firebase Authentication SDK. А интерфейс FirebaseAuth.AuthStateListener вызывается, когда происходит изменение в состоянии аутентификации.

Разработчики рекомендуют отслеживать текущее состояние экземпляра FirebaseAuth с помощью слушателей. Cлушатель получает уведомления каждый раз, когда определенное событие происходит с объектом FirebaseAuth.

В методе onCreate находим все элементы экрана и присваиваем слушатели кнопкам. Далее инициализируем экземпляр FirebaseAuth и создаем слушатель AuthStateListener с методом onAuthStateChanged, чтобы отслеживать, когда пользователь входит или выходит.

Согласно документации, слушатель получает уведомления в следующих ситуациях:

  1. Когда объект FirebaseAuth завершает инициализацию и пользователь уже авторизован в предыдущей сессии, или был перенаправлен из потока входа другого поставщика идентификации.
  2. Когда пользователь выполняет вход (текущий пользователь установлен)
  3. Когда пользователь выполняет выход (текущий пользователь становится null)
  4. Когда маркер доступа (access token) текущего пользователя обновляется. Это может произойти в следующих случаях:
  • если истек срок действия токена
  • пользователь повторно выполняет проверку подлинности
  • пользователь меняет свой пароль.

При этом Firebase выдает новые маркеры доступа и помечает старые как недействительные. При смене пароля автоматически выполняется выход пользователя на каждом устройстве, по соображениям безопасности.

Но вернемся к коду. Получаем экземпляр класса FirebaseUser, который представляет сведения о профиле пользователя в базе данных пользователей проекта Firebase. Он также содержит вспомогательные методы для изменения или получения информации о профиле, а также для управления состоянием аутентификации пользователя.

Ниже здесь вызывается метод updateUI, принимающий экземпляр текущего пользователя. В этом методе происходит вывод информации о текущем пользователе в текстовые поля на экране приложения, а также регулируется видимость элементов пользовательского интерфейса в зависимости от того, авторизован пользователь или нет.

В методах onStart() и onStop() присваиваем слушатель экземпляру класса FirebaseAuth и удаляем слушатель соответственно.

В методе createAccount, который срабатывает при нажатии кнопки создания аккаунта, сперва выполняется проверка на пустоту полей ввода email и пароля, из которых метод получает строковые переменные email и password. Логика этой проверки прописана в методе validateForm.

Далее метод createUserWithEmailAndPassword пытается создать новую учетную запись пользователя, связанную с указанным адресом электронной почты и паролем. В базе данных проекта Firebase email служит уникальным идентификатором, а также используется для отправки письма сброса пароля.

В случае успешного создания учетной записи пользователя, будет автоматически выполнен вход этого пользователя в вашем приложении. После успешного завершения этой операции вызывается событие onAuthStateChanged(FirebaseAuth) во всех зарегистрированных слушателях FirebaseAuth.AuthStateListeners.

Создание учетной записи пользователя может завершиться ошибкой, если учетная запись уже существует, email некорректный или пароль недостаточно сильный. Вот список исключений, которые могут быть выброшены при этом:

  • FirebaseAuthWeakPasswordException — пароль не является достаточно сильным
  • FirebaseAuthInvalidCredentialsException — email адрес имеет неправильный формат
  • FirebaseAuthUserCollisionException — уже существует учетная запись с таким email

Метод addOnCompleteListener добавляет слушатель, который вызывается, когда задача завершается.

В методе onComplete интерфейса OnCompleteListener можно реализовать оповещение об успешном входе и прописать логику поведения приложения.

Если вход не выполнен, выводится сообщение об ошибке для пользователя. Можно отлавливать здесь вышеупомянутые исключения и выводить более осмысленные сообщения с причиной ошибки.

О том, что такое исключения и как с ними работать, смотрите в видеоуроках, здесь и здесь.

Далее здесь метод signIn, который выполняется при нажатии кнопки входа в пользовательском интерфейсе. Тело метода похоже на уже рассмотренный метод createAccount. Метод signIn также принимает на вход email и пароль, проверяет их и затем выполняет попытку авторизации пользователя с помощью метода signInWithEmailAndPassword.

После успешного завершения этой операции также вызывается событие onAuthStateChanged(FirebaseAuth) во всех зарегистрированных слушателях FirebaseAuth.AuthStateListeners.

Исключения, которые выбрасываются в случае неудачи:

  • FirebaseAuthInvalidUserException возникает, если учетная запись пользователя с таким email не существует или отключена
  • FirebaseAuthInvalidCredentialsException возникает, если введен неправильный пароль

Следующий метод — signOut — выполняется при нажатии кнопки выхода и вызывает одноименный метод класса FirebaseAuth. Выход из аккаунта текущего пользователя и удаление его из кэша.

И метод onClick обрабатывает нажатия кнопок на экране:

Остальные методы мы уже рассмотрели.

Весь код класса EmailPasswordActivity.java:

Осталось запустить приложение на устройстве и протестировать его работу. Процесс тестирования подробно смотрите в видео.

 

На этом все, вот ссылка на документацию. В следующих уроках мы рассмотрим аутентификацию при помощи аккаунта Google, Facebook и Twitter.

<<<Предыдущий урок      Следующий урок>>>

Firebase: Аутентификация пользователей с помощью email и пароля в android приложении обновлено: Ноябрь 23, 2016 автором: admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*
Website