Я разработчик программного обеспечения, недавно прошедший программу Grace Hopper, 17-недельный иммерсивный курс, посвященный полнофункциональному Javascript. Для моего последнего проекта мы с товарищами по команде решили исследовать мир React Native. Для разработчиков Javascript, имевших опыт работы с React, React Native был логичным выбором. У нас не было времени выучить другой язык (у нас было меньше 3 недель… ох!), но мы все равно хотели испытать себя с помощью новой технологии. Нашим первым препятствием была настройка аутентификации и сохранение аутентифицированного пользователя во всем состоянии приложения. В итоге мы использовали аутентификацию Firebase, которую было очень легко добавить, как только мы освоились. Я создал это руководство для начинающих React Native, которым нужна простая отправная точка при разработке приложения, требующего аутентификации.

Что будет охватывать этот учебник?

Мы рассмотрим настройку базовой структуры и потока аутентификации пользователей для приложения React Native. Мы настроим три основных экрана в React Native, добавим Firebase в приложение и будем использовать React Context API для сохранения аутентифицированного пользователя. Эта настройка может помочь вам начать работу перед реализацией собственных функций!

Начало работы с React Native

Лучший способ начать работу с React Native — ознакомиться с документами. Они предоставляют два варианта настройки среды разработки. Вы можете использовать Expo, набор инструментов, построенный на основе React Native, который позволяет настроить приложение и протестировать его на своем телефоне за считанные минуты. Основное преимущество Expo заключается в том, что он делает настройку, тестирование и совместное использование вашего приложения достаточно простыми для начинающего разработчика. Другой вариант — использовать React Native CLI для настройки вашего приложения, что потребует установки как XCode, так и Android Studio, если вы хотите разрабатывать как для iOS, так и для Android, и настроить проект сложнее. Однако он позволяет добавлять нативные модули и занимает меньше места, чем Expo. В этом уроке мы будем использовать Expo, чтобы сразу приступить к работе.

Просто следуйте инструкциям в документации в разделе Быстрый запуск Expo CLI, пока вы не сможете открыть свое приложение в текстовом редакторе (я использую VSCode) и просмотреть работающее приложение на своем телефоне. Вы можете заметить, что есть варианты Запустить на симуляторе iOS или Запустить на устройстве / эмуляторе Android. Вам нужно будет загрузить дополнительные инструменты для использования этих функций (вот информация для Android и iOS), которые мы не будем рассматривать в этой статье. Тем не менее, я определенно рекомендую использовать их, потому что тогда вы можете протестировать их на телефонах, отличных от того, который у вас есть!

Реагировать на нативные экраны

В React Native различные экраны нашего приложения будут компонентами, как и в обычном React. Давайте начнем с создания новой папки компонентов в нашем проекте и добавления трех новых файлов: Home.js, LogIn.js и SignUp.js.

mkdir components
cd components && touch Home.js, LogIn.js, SignUp.js 

Давайте добавим к этим компонентам код-заполнитель, чтобы не было ошибок при последующем тестировании. React Native предоставляет нам некоторые основные компоненты для создания пользовательского интерфейса, такие как <View> (аналогично <div> в HTML) и <Text> (как <p> в HTML). Мы должны импортировать эти компоненты в каждый файл, в котором мы их используем. Я просто добавил базовый текст на каждую страницу и кнопку на главной странице, которая в конечном итоге позволит нам выйти из аккаунта.

Реагировать на навигацию

Для моего приложения я хотел бы, чтобы пользователи могли просматривать мою домашнюю страницу, только если они вошли в систему, и иметь возможность перемещаться с экрана на экран. Мы можем использовать React Navigation для достижения этой цели. Установите эти пакеты внутри вашего проекта.

npm install @react-navigation/native @react-navigation/stack
expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view

Прямо сейчас мы все еще видим страницу по умолчанию в App.js. Давайте удалим все с этой страницы. Импортируйте три компонента, а также некоторые инструменты, которые вам понадобятся, из React Navigation. NavigationContainer будет управлять нашей навигацией и обычно размещается в корневом каталоге наших приложений (в нашем случае это App.js). Мы можем вызвать createStackNavigator, функцию, которая возвращает объект, содержащий свойства Screen и Navigator. Затем мы можем установить Screen элементов внутри Navigator и поместить Navigator внутри NavigationContainer. Я настроил базовый стек навигации, который в настоящее время показывает только экран входа в систему, потому что это первый экран в стеке. Наш следующий шаг — настроить аутентификацию пользователя с помощью Firebase, чтобы мы могли отображать экран Home, если пользователь вошел в систему!

Вы должны видеть экран LogIn только сейчас. Если у вас возникли проблемы, проверьте свою работу с веткой step_1_nav в исходниках.

Настроить Firebase

Давайте перейдем к Firebase, чтобы мы могли интегрировать его с нашим проектом. Зарегистрируйтесь, если у вас нет учетной записи Google, и перейдите к «Добавить проект» из «Перейти к консоли». Следуйте инструкциям по созданию проекта (ваш выбор, включать ли Google Analytics, я не делал для этого проекта).

Чтобы аутентифицировать пользователей с помощью электронной почты и пароля (метод, описанный в этом руководстве), перейдите к «Аутентификация» на боковой панели и включите «Электронная почта/пароль» в разделе «Метод входа». Firebase упрощает использование и других методов, таких как Google, Facebook или Apple OAuth!

Нажмите «Интернет», чтобы зарегистрировать свое приложение.

Вы получите объект firebaseConfig, который позволит нам подключить наше приложение к Firebase. Не добавляйте его так, как говорит вам Firebase… в конце концов, у нас не должно быть никаких тегов ‹script›, потому что у нас нет HTML в React Native!

Вернувшись в редактор кода, создайте новый файл firebase.js в главном каталоге проекта и npm install firebase. Мы собираемся добавить объект firebaseConfig в firebase.js и инициализировать приложение Firebase.

Реагировать на контекст

Далее мы будем использовать React Context API для доступа к аутентифицированному пользователю во всех областях нашего приложения. Для этого мы можем создать новый контекст и создать несколько методов, которые мы будем использовать в наших компонентах для прослушивания изменений в статусе аутентификации и доступа к вошедшему пользователю.

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

Прежде чем мы сможем войти в систему, мы должны зарегистрировать учетную запись! Давайте добавим несколько полей ввода в LogIn.js и кнопку «Зарегистрироваться», чтобы пользователи, у которых нет учетной записи, могли ее создать. Мы также должны добавить метод к нашему компоненту, который будет перенаправлять нас на экран регистрации, когда мы нажимаем кнопку.

Мы также добавим аналогичный код в SignUp.js с кнопкой возврата на страницу входа.

Теперь нам нужно отслеживать значения в полях ввода, чтобы мы могли передать эту информацию в Firebase. Я установил состояние React email и password на текст, введенный во входные данные, с помощью хука Reach useState. Теперь мы наконец можем добавить Firebase! Обязательно import {firebase} from "../firebase". Firebase поставляется со встроенным методом регистрации новых пользователей. Позвоните по номеру firebase.auth().createUserWithEmailAndPassword(email, password), чтобы зарегистрировать пользователя. Когда вы зарегистрируете ответ, вы увидите полезную информацию о пользователе, к которому у вас будет доступ. Если вы зайдете в свою учетную запись Firebase, вы должны увидеть только что созданного пользователя! Что еще более интересно, приложение должно автоматически переходить на главный экран, потому что текущий пользователь больше не null.

Далее мы добавим почти такой же код в LogIn.js, за исключением того, что вместо этого мы используем метод signInWithEmailAndPassword.

Чтобы протестировать нашу страницу входа в систему, мы должны выйти из системы… давайте добавим эту функциональность дальше! Вызовите метод firebase signOut. Вы выйдете из системы и будете перенаправлены на страницу входа!

Это все на сегодня! Это только первый шаг в настройке работающего мобильного приложения в React Native. Теперь вам решать, куда идти с ним!

Исходный код руководства: https://github.com/valerieingmann/react-native-firebase-auth

С этой отправной точкой мы с моими замечательными товарищами по команде создали AccountaBee, мобильное приложение, которое позволяет вам и вашим друзьям ставить еженедельные цели, отмечать их в течение недели и поддерживать социальную ответственность друг друга. Мы разработали собственный бэкэнд, используя Node.js, Express, PostgreSQL и Sequelize (развернутый на Heroku), но вы также можете хранить данные в базе данных реального времени Firebase или в Cloud Firestore. На нашем сервере мы интегрировали Firebase Admin SDK для проверки пользовательских токенов в наших маршрутах API. Учебник по этому скоро!

AccountaBee Github → https://github.com/AccountaBee

LinkedIn →https://www.linkedin.com/in/valerie-ingmann