Начало работы с аутентификацией Firebase под iOS

Почему realtime database?

Потому что она старше, стабильней и почти любая проблема с ней освещена в интернете.

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

Emulator usage#

If you are using the local Authentication emulator, then it is possible to connect to this using the useAuthEmulator method.
Ensure you pass the correct port on which the Firebase emulator is running on.
Ensure you have enabled network connections to the emulators in your apps following the emulator usage instructions in the general FlutterFire installation notes for each operating system.

Enable email link sign-in for your firebase project#

Ensure that passwordless sign-in is enabled in the project. Follow the guide here.

Other sign-in methods#

Firebase also supports authenticating with external provides. To learn more, view the documentation for your authentication method:

Sign-in#

To sign-in to an existing account, call the signInWithEmailAndPassword() method:

Once successful, if you are listening to changes in authentication state, a new event will be sent to your
listeners.

Verify email link and sign in#

Firebase Authentication uses Firebase Dynamic Links to send the email link to a mobile device. For sign-in completion via mobile application, the application has to be configured to detect the incoming application link, parse the underlying deep link and then complete the sign-in.

Follow the setup process for Firebase Dynamic Links on Flutter in this guide and ensure you have
correctly integrated Dynamic Links for Android and Apple devices.

After you received the link, verify that it is meant for email link authentication and complete the sign in.

Анонимные пользователи

Firebase также имеет возможность управлять анонимным рабочим процессом проверки подлинности, который по существу является временной учетной записью, которая может использоваться для аутентификации пользователей и предоставления им ограниченного доступа.

Идея в том что в определенный момент времени, анонимные пользователи могут зарегистрироваться, и Firebase может предоставить мост для связывания своих анонимных учетных записей с их учетными данными без потери данных, сохраняющихся во время анонимных состояний. Чтобы войти как анонимный пользователь, вы должны вызвать:

Возвращаемся к работе с данными

Чтобы контекст был понятен, так выглядит моя база на данный момент:

Зачем нужна firebase, ведь есть другие базы данных…

Единственная причина, по которой я изначально заинтересовался Firebase, это гибкость и скорость деплоя в проект.

Вот смотрите: языки программирования Python и JavaScript сами по себе гибкие (и очень популярные). Благодаря этому, мы (разработчики) получаем мощный инструмент для создания в кратчайшие сроки сайта, веб-приложения, мобильного или даже десктопного приложения.

Firebase позволяет сохранять эту скорость. Не нужно отвлекаться на какие-то другие вещи (создание базы данных, написание API приема и получения данных). Вся серверная часть ложится на плечи этого сервиса. Благодаря такому мощному инструменту можно за один вечер накидать функционал любого модуля с чтением, сохранением данных и показать заказчику функциональный пример.

Ну а если у Вас маленькое SPA-приложение или простенькое мобильное, где все сводится к манипулированию каких-то текстовых значений, можно использовать Firebase как основную базу данных. И даже платить не надо. 

Метод firebase.auth().signinwithemailandpassword()

Это метод авторизации. Давайте сразу на примере. Смотрим в конструкцию try.

Пример кода:

Метод firebase.database().ref().once()

Для получения данных из Firebase используем метод firebase.database().ref().once(). 

Пример кода:

async loadClietsList() {try {const query_clientsList = await firebase.database().ref(‘clients’).once(‘value’)const clientsList = query_clientsList.val()         console.log(clientsListArray)} catch (error) {console.log(error.message)throw error}}

Нам нужно также создать асинхронную функцию. Методу firebase мы добавляем await. Константа query_clientsList содержит в себе вышеописанный метод. В ref указывается путь к объекту, который хотим получить. Посмотрите на скриншот выше, clients у меня находятся в основе моей базы данных, поэтому путь выглядит у меня максимально простым.

Если я хочу обратиться к какому-то клиенту из clients в ref, я укажу еще его идентификатор, получится ref(‘clietns/-M5mvz6HSFnbP3L2KiHG’), а если я хочу взять номер телефона конкретного клиента, ref будет выглядеть так ref(‘clietns/-M5mvz6HSFnbP3L2KiHG/number’).

После ref идет обязательный метод once(‘value’). Т.е мы говорим Firebase, что хотим по этой ссылке получить какие-то значение.

Когда await выполнится, и константа query_clientsList заполнится, мы можем воспользоваться методом val() по отношению к константе. Например, query_clientsList.val(). Если эту конструкцию мы попробуем отправить в консоль, то увидим заветные данные: три клиента из моей базы данных.

Метод firebase.database().ref().push()

Для записи данных в Firebase используем метод firebase.database().ref().push().

Пример кода:

async newClient(newClinet) {try {const addClient = await firebase.database().ref(‘clients’).push(newClinet)console.log(addClient)} catch (error) {console.log(error.message)throw error}}

Нам нужно создать асинхронную функцию. К методу firebase мы добавляем await. Если дальше хотим как-то обработать ответ от базы данных асинхронные функции обязательны.

Здесь в асинхронной функции newClient я передаю аргумент newClient. Данный аргумент содержит какой-то объект с данными, далее этот объект (новый клиент) я отправляю в Firebase.

Метод ref() содержит в себе путь, куда мы будем что-то добавлять. Для более детального понимания смотрите скриншот выше, там копия моей базы. Данного пути еще может даже не существовать, поэтому с помощью этого метода можно создавать новые хранилища (объекты в json хранилище).

Метод push() содержит в себе данные, которые мы будет отправлять в объект clients. 

Представим, код выше я запустил 3 раза. Результат запросов вы можете увидеть все на том же скриншоте выше. Как видите Firebase сама создала главный объект (хранилище) clients и записала в него три объекта поменьше. Каждому объекту Firebase сгенерировала свой ключ (идентификатор). Он уникален в рамках объекта clients.

Метод firebase.database().ref().remove()

Данный метод отвечает за удаление данных из нужного объекта.

Пример кода:

firebase.database().ref(‘clients’).remove()

Такая команда полностью удалит весь объект clients.

Если путь у ref() будет примерно такой: ‘clients/-M5mvz6HSFnbP3L2KiHG’, то удален будет только тот объект в clients, который имеет данный идентификатор.

Настройка аутентификации телефона

Прежде чем мы закончим приложение, нам нужно добавить еще несколько шагов, чтобы иметь возможность обрабатывать аутентификацию на основе телефона. Аутентификация телефона позволяет пользователям вводить свои номера телефонов и проверяет их личность посредством SMS-сообщения, которое включает одноразовый код.

Чтобы получить токен APN, необходимый серверу Firebase, выполните следующее в файле AppDelegate.swift:

Поскольку мы уже включили регистрацию номера телефона в консоли Firebase, наша следующая задача – предоставить FirebaseDo для получения APN из Firebase – задачи, которую вы также будете делать, если хотите поддерживать push-уведомления. В этом случае, однако, Firebase отправит на устройство тихое push-уведомление, чтобы подтвердить запрос на ввод номера телефона.

Вы не сможете протестировать этот метод аутентификации с помощью Xcode Simulator, скорее вам нужно будет подключить ваш iPhone для установки и запуска приложения.

В Xcode перейдите в «Возможности» и включите Push-уведомления. Приложение автоматически предоставит и создаст файл FirebaseDo.entitlements, как показано в навигаторе проекта.

Затем мы создадим ключ аутентификации Apple Push Notification для загрузки в Firebase. На портале разработчиков Apple в разделе «Ключи» введите название своего проекта, указав флажки APN. Загрузите полученный файл .p8 и обратите внимание на идентификатор ключа, который нам нужно будет ввести в ближайшее время.

Вернитесь в консоль Firebase и в разделе «Настройки проекта» (значок шестеренки) выберите вкладку «Облачные сообщения». В разделе «Конфигурация приложения App Store» и «APNs Authentication Key» выберите кнопку «Загрузить» и загрузите файл .

Настройка проекта

В этой серии мы собираемся создать приложение to-do под названием FirebaseDo. Начнем с клонирования проекта с GitHub:

Обработка изменений состояния auth

Наконец, мы реализуем требуемый протокол для нашего делегата FIRAuthUIDelegate, который позволит нам прослушивать и обрабатывать состояния аутентификации. Этот метод будет действовать только в том случае, если ошибка действительно произошла, но мы можем даже обрабатывать успешные аутентификации.

Отображение входа в систему

Затем мы обрабатываем метод loginAction(), который вызывается в том случае, если слушатель событий определяет, что пользователь в настоящее время не аутентифицирован. Все, что нам нужно сделать в этом случае, представляет собой modhUI.

Здесь начинается волшебство, так как FirebaseUI обрабатывает все: просит пользователя ввести свой адрес электронной почты, определяет, существует ли пользователь (в этом случае у пользователя будет запрошен пароль) или для нового пользователя, запросит их имя и назначение пароля.

Если бы мы вручную применяли методы аутентификации, нам нужно было бы обрабатывать все эти разные сценарии, включая сброс пароля электронной почты и т.д.

Отправка пользователям email

Firebase обеспечивает отличную поддержку для верификации по email или отправки запроса на сброс пароля на emai.

Панель управления firebase

Переходим к практическому ознакомлению, давайте все щупать руками. Мы посмотрим, что находится внутри “Консоли разработчика” Firebase, познакомимся с интересными методами и отправим пару тестовых запросов. Примеры я буду показывать на JavaScript в проекте где используется Webpack и менеджер пакетов npm. Основа, все же, это JavaScript, поэтому не пугайтесь.

Права доступа

В базе данных есть вкладка “Правила”. 

В самом начале раздела “Чтение, запись и обновление данных” я попросил вас установить правила чтения и записи базы данных в тестовый режим. Когда вы закончите разработку приложения, вы обнаружите, что ваши данные могут менять и получать абсолютно все, у кого есть ваш конфиг.

Если вы пишите на JavaScript, то ваш конфиг можно выдернуть просто из исходников. Поэтому, чтобы никто не нагадил, советую ознакомиться с документацией от Google на этот счет.

В правах доступа используется свой “язык” оперирующий значениями true и false. На скриншоте выше мои настройки, здесь я просто запретил чтение и запись всем, кто не авторизован. Мое приложение это обычная CRM система для малого бизнеса, у нее общее хранилище и данными внутри управляют 3-4 человека, а свободная регистрация вообще отсутствует, поэтому таких настроек хватает.

Ваше приложение – ваша логика, поэтому позаботьтесь о безопасности.

P.S: Как и обещал, ссылка на документацию к Storage.

Предпосылки

Вам понадобится следующее:

Регистрация

Сначала нужно перейти на сайт и зарегистрироваться в Firebase. Можно использовать свою Google почту для быстрой регистрации.

Нажимаем на большую кнопку “Добавить проект”. По желанию подключаем Google Аналитику. Возможно (не знаю осталось ли это в новой версии), вас попросит выбрать местоположение проекта, просто выберите свою страну.

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

Регистрация и авторизация пользователей за 5 минут

Для начала вернемся в консоль Firebase и перейдем на страницу “Аутентификация”. Здесь есть две вкладки, это Пользователи и Метод регистрации. 

Вкладка Пользователи покажет вам всех зарегистрированных пользователей в приложении. Вкладка Метод регистрации позволяет выбрать и настроить предпочтительный метод. Например, включим регистрацию по почте и паролю. По желанию можете там добавить авторизацию по ссылке пришедшей на почту. Просто нажмите на “Адрес электронной почты и пароль” и увидите необходимые настройки.

Тестирование приложения

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

Это выглядит слегка сыро, но вы можете настроить практически все аспекты шаблона.

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

Заполнив эту форму, вы зарегистрируетесь как новый пользователь (хотя наше приложение будет отображать только пустой экран). Чтобы подтвердить, что новый пользователь был создан, вы можете перейти в «Аутентификация»> «Пользователи» в вашей Firebase Console.

Проверьте каждый из методов проверки подлинности, помня, что вам нужно будет выйти из системы, чтобы повторно запустить запрос проверки подлинности. Повторно активируйте auth, добавив следующий код в качестве первой строки в viewDidLoad() после вызовите:

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

Управление изменениями состояния аутентификации

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

Создав обработчик, .addStateDidChangeListener, вы теперь можете определить, в каком состоянии находится пользователь, и инициировать определенный вызов на основе этого.

Цели этого учебника

В конце этого урока вы начнете с простого приложения Firebase, которое использует Firebase SDK для аутентификации пользователей, используя электронную почту и пароль, а также через SMS. По пути вы узнаете о:

  1. Настройка Firebase с помощью CocoaPods
  2. Настройка делегата приложения для подключения к Firebase
  3. Настройка прав доступа для аутентификации пользователя Text/SMS
  4. Использование FirebaseUI для аутентификации пользователей

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

Чтение, запись и обновление данных

Снова возвращаемся в консоль. В левом меню выбираем Database. Это и есть наша база данных. Здесь нам предлагают создать либо облачную базу данных, либо Realtime Database. Выбирайте Realtime Database.

Заключение

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

Затем мы приступили к созданию нашего простого приложения FirebaseDo, и хотя оно еще не выполняет никаких функций напоминания, мы начнем работать над этим в следующем учебном пособии. Но всего за несколько строк нам удалось выполнить следующее:

  • Встроенная Firebase для настройки механизма аутентификации для электронной почты и пароля
  • Добавлена возможность аутентификации через SMS
  • Отслеживаемые состояния аутентификации
  • Грамотно обрабатывать ошибки

В оставшейся части серии вы познакомитесь с некоторыми другими компонентами Firebase.

И пока вы здесь, обязательно ознакомьтесь с некоторыми другими нашими статьями по разработке приложений для iOS!

Вывод

https://www.youtube.com/watch?v=iKlWaUszxB4

Надеюсь, вы впечатлены мощью инструмента Firebase и обязательно с ним ознакомитесь хотя бы в тестовых целях.

Похожее:  ОТЧЕТ ОО 1 ВХОД В ЛИЧНЫЙ КАБИНЕТ

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

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