Добавьте аутентификацию Firebase в свое приложение Vue
Firebase предоставляет очень простой и быстрый способ добавить аутентификацию в ваше приложение Vue.js. В этой статье я покажу вам, как легко разрешить пользователям регистрироваться в вашем приложении, используя свой адрес электронной почты и пароль.
Что мы будем создавать
Мы собираемся создать очень простое приложение Vue, используя Vue CLI. Мы изменим шаблонное приложение по умолчанию, чтобы оно предоставляло форму для регистрации в качестве нового пользователя, страницу входа и страницу панели инструментов, отображаемую только для тех, кто вошел в систему.
Пользователи смогут зарегистрироваться в приложении, используя систему аутентификации по электронной почте и паролю в Firebase. После регистрации и входа в систему им будет представлена страница панели инструментов.
Создание нашего проекта
Я буду использовать Vue CLI, чтобы разработать проект, с которого мы начнем. Для этого в вашей системе должен быть установлен Vue CLI. Если он у вас не установлен, вы можете установить его глобально с помощью этой команды:
npm install -g @vue/cli
Теперь мы можем использовать Vue CLI для создания нашего проекта. Создайте новый проект с помощью этой команды:
vue create vue-firebase-auth-tutorial
Вам будет предложено выбрать предустановку. Выберите «Выбрать функции вручную», а затем выберите «babel», «Router» и «Linter / Formatter».
Вас спросят, хотите ли вы использовать режим истории для «Маршрутизатора». Выберите «Да» (должно быть по умолчанию).
Вы можете выбрать любой линтер, который хотите, но для этого урока я выберу «Eslint + Prettier».
После завершения работы Vue CLI он выдаст вам команды для перехода в новый каталог, который был только что создан, и команду для запуска сервера. Следуйте этим указаниям. После запуска сервера вы можете открыть в браузере localhost:8080
. Вы должны увидеть это:
Firebase
В этом руководстве я предполагаю, что вы уже создали учетную запись в Firebase. Если нет, вам нужно сделать это, прежде чем продолжить.
Мы будем использовать Firebase SDK в нашем приложении для обеспечения функциональности аутентификации. Вы можете установить Firebase в свое приложение с помощью этой команды:
npm install firebase
Создание проекта в Firebase
Следующим шагом будет добавление проекта в консоль Firebase. Войдите в консоль Firebase. Нажмите кнопку, чтобы добавить новый проект:
Вы можете добавить Google Analytics в свой проект, но я не буду добавлять его в этом руководстве. Нажмите кнопку «Создать проект».
После того, как Firebase создаст ваш новый проект, вам нужно будет добавить Firebase в свое приложение. Щелкните значок сети:
Вам будет предложено ввести псевдоним для вашего приложения. Я ввел псевдоним «Vue Firebase Auth Tutorial». После ввода своего псевдонима нажмите кнопку «Зарегистрировать приложение»:
Для шага 2 будут инструкции по добавлению Firebase SDK в ваше приложение. Нам нужно только скопировать firebaseConfig
и строку для инициализации приложения.
Откройте ваш main.js
файл. Мы инициализируем Firebase в нашем приложении Vue. Под существующими строками импорта вставьте firebaseConfig
и строку для инициализации приложения. Вам нужно будет добавить импорт для Firebase. Ваш main.js
файл должен выглядеть так:
Установка метода аутентификации
Откройте консоль Firebase в своем браузере. В консоли найдите только что созданный проект и щелкните его.
В левом верхнем углу нажмите «Аутентификация»:
Нажмите кнопку «Начать».
В меню «Аутентификация» перейдите на вкладку «Метод входа»:
Наведите указатель мыши на первую запись «Электронная почта / Пароль». Щелкните значок карандаша, чтобы открыть диалоговое окно. Выберите «Включить»:
Нажмите кнопку «Сохранить». Теперь вы добавили возможность создавать и аутентифицировать пользователей, используя их адрес электронной почты и пароль.
Добавление новых компонентов
Когда мы создавали наше приложение с Vue Router, оно автоматически создавало два маршрута для нашего приложения: Home и About. Мы будем использовать Home как логин для нашего приложения. Мы будем использовать «О программе» в качестве страницы для регистрации в качестве нового пользователя нашего приложения.
Когда зарегистрированный пользователь входит в наше приложение, мы хотим показать ему страницу панели управления. Мы также хотим предоставить пользователю возможность выйти из нашего приложения. В настоящее время ни один из этих вариантов недоступен в нашем приложении, поэтому давайте добавим их сейчас.
Откройте App.vue
файл. В настоящее время nav
имеет две записи: "Домой" и "О программе". Мы изменим «О программе» на «Регистрация» и добавим две новые записи для «Личный кабинет» и «Выход из системы». Обновите навигацию, чтобы она выглядела так:
<div id="nav"> <router-link to="/">Home</router-link> | <router-link to="/register">Register</router-link> | <router-link to="/dashboard">Dashboard</router-link> | <button @click="logout">Logout</button> </div>
Когда вы нажимаете кнопку выхода, вызывается метод logout
. Мы определим это позже.
Создайте наш компонент входа в систему
Откройте файл Home.vue
в папке просмотров. Удалите весь HTML-код в разделе шаблона. Замените его этим кодом, который предоставляет очень простую форму входа в систему. Вот код:
Теперь, если вы просмотрите наше приложение, вы увидите форму входа на домашней странице, подобную этой:
Наша форма немного переполнена полями ввода и кнопками, соприкасающимися друг с другом. Мы можем изменить это, добавив стили CSS. Мы могли бы добавить стили CSS в файл Home.vue
. Поскольку мы собираемся использовать ту же форму для регистрации пользователя, нам нужно будет продублировать тот же стиль CSS в этом компоненте. Вместо этого мы можем поместить стиль в файл App.vue
, и он будет стилизовать как наши формы входа в систему, так и формы регистрации.
Откройте файл App.vue
. В стиле добавьте это:
input { margin-right: 20px; }
Теперь наша форма входа в систему выглядит лучше:
Создайте нашу регистрационную форму
Откройте файл About.vue
в папке просмотров. Вы можете скопировать HTML-код из Home.vue
файла и вставить его в этот файл. Измените каждую ссылку Login
на Register
. Ваш About.vue
файл должен выглядеть так:
Обновите наши маршруты
В настоящее время URL-адрес для отображения нашей страницы регистрации - /about
. Давайте изменим это на /register
. Откройте файл index.js
в папке роутера. Измените второй маршрут для /about
на /register
. Ваш массив routes
должен выглядеть так:
Пока мы находимся в этом файле, давайте продолжим и добавим запись для отображения нашего компонента панели инструментов. Добавьте третий маршрут, чтобы отобразить /dashboard
. Теперь ваш массив routes
должен выглядеть так:
Создать компонент панели мониторинга
Создайте новый файл с именем Dashboard.vue
в папке просмотров. Эта страница должна быть видна только пользователям, которые вошли в наше приложение.
В разделе шаблонов добавьте следующий HTML-код:
<div> <h2>Dashboard</h2> <p>This page is only visible to users that are currently logged in</p> </div>
Регистрация пользователей
Ранее, когда мы обновляли файл About.vue
для регистрации пользователей, у нас был вызов метода с именем Register
. Нам нужно добавить функционал для регистрации новых пользователей.
Во-первых, давайте ознакомимся с документацией Firebase о том, как создать учетную запись на основе пароля. Firebase Auth имеет метод createuserWithEmailAndPassword
. Вам необходимо ввести адрес электронной почты и пароль пользователя. Этот метод либо зарегистрирует пользователя и вернет объект пользователя, либо вернет сообщение об ошибке. Давайте сейчас реализуем этот метод.
Откройте файл About.vue
. Нам нужно добавить email
и password
к нашему объекту данных. В разделе сценария добавьте следующий объект данных:
Затем добавьте объект methods
с помощью одного метода с именем register
. Мы можем буквально скопировать пример из документации Firebase для этого метода. Нам потребуется внести следующие изменения в код из документации:
- Мы не будем использовать объект
user
. - Отображение предупреждения в случае сбоя входа в систему.
- Если пользователь зарегистрирован, перенаправьте его на страницу входа.
Вот код метода register
:
Давайте протестируем регистрацию нашего первого пользователя для нашего приложения. Нажмите «Зарегистрироваться» в навигации. Введите адрес электронной почты и пароль и нажмите кнопку «Зарегистрироваться».
Если пользователь был успешно зарегистрирован, вы должны получить предупреждение и быть перенаправлены на страницу входа.
Если регистрация не удалась, вы должны получить предупреждение с сообщением об ошибке.
Чтобы проверить, успешно ли был зарегистрирован пользователь, перейдите в консоль Firebase и щелкните свой проект. На левой панели навигации нажмите
«Аутентификация». Затем щелкните вкладку «Пользователи». Вы увидите своего пользователя в списке:
Теперь, когда мы успешно реализовали регистрацию новых пользователей для нашего приложения, нам нужно реализовать возможность для пользователей входить в систему.
Вход в систему пользователей
Мы использовали код, предоставленный Firebase, для регистрации нового пользователя. Документация Firebase предоставляет образец кода для входа пользователя с адресом электронной почты и паролем. Мы будем использовать метод аутентификации Firebase signInWithEmailAndPassword
.
Как и в случае с Register
, мы внесем те же изменения в пример кода. Мы предупредим пользователя, если он успешно вошел в систему, и перенаправим его на страницу панели управления.
Если логин не удался, мы отображаем предупреждение с сообщением об ошибке.
Вот метод login
, который должен быть в вашем Home.vue
файле:
Создание Route Guard
Мы не хотим, чтобы пользователи могли переходить к /dashboard
, если они не вошли в систему. Мы можем сделать это, добавив защиту маршрута для /dashboard
.
Откройте файл index.js
в папке роутера. Мы добавим мета-ключ к /register
маршруту, который будет сообщать, что требуется аутентификация. Вот обновленный маршрут:
Прежде чем маршрутизатор Vue обработает маршрут, у него есть метод beforeEach
. Мы можем проверить, требует ли маршрут аутентификации, проверив мета-значение.
Если требуется аутентификация, нам нужно иметь возможность проверить, вошел ли пользователь в систему или нет. К счастью, в Firebase auth есть объект currentUser
. Мы будем использовать это, чтобы проверить, вошел ли пользователь в систему или нет.
Если они в настоящее время вошли в систему, мы отобразим страницу панели управления.
В противном случае мы отобразим предупреждение, сообщающее пользователю, что он должен войти в систему, и перенаправим его на домашнюю страницу, чтобы он мог войти в систему.
Вот код:
Выйти
Последнее, что нам нужно добавить в наше приложение, - это метод logout
. Firebase auth предоставляет signOut
метод, который мы будем использовать.
Откройте файл App.vue
. Мы выйдем из системы. В случае успеха они получат предупреждение и будут перенаправлены на домашнюю страницу.
Если выход не удается, мы отображаем предупреждение с сообщением об ошибке и перенаправляем их на домашнюю страницу.
Добавьте этот код для метода logout
:
В приведенном выше коде мы используем Firebase, но не имеем ссылки на нее в нашем index.js
файле. Нам нужно это добавить. Прокрутите вверх до верхней части файла, где находятся существующие строки импорта. Добавьте эту строку:
import firebase from 'firebase';
С этим добавленным, вы можете попрактиковаться в регистрации нового пользователя. Затем войдите в систему с этим пользователем и убедитесь, что вы перенаправлены на страницу панели управления. Затем выйдите из системы и убедитесь, что вы перенаправлены на домашнюю страницу.
Поздравляем, вы успешно добавили аутентификацию Firebase в свое приложение Vue!
Полный код доступен на GitHub.
Использование других методов аутентификации
Я написал несколько последующих статей о добавлении аутентификации в ваше приложение Vue с использованием других методов аутентификации.
Хотите использовать Auth0 для аутентификации? Прочтите эту статью.
Хотите использовать AWS Amplify для аутентификации? Прочтите эту статью.
Заключение
Firebase предлагает очень эффективный метод добавления аутентификации в ваши приложения Vue. Он позволяет добавлять аутентификацию без необходимости писать собственную внутреннюю службу и самостоятельно выполнять аутентификацию.
Надеюсь, вам понравилась эта статья. Спасибо за прочтение.