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

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

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

Создание приложения Firebase

Сначала вам нужно создать приложение Firebase, открыть браузер и перейти на https://console.firebase.google.com. Вам будет предложено войти в систему с вашей учетной записью Google, при успешном входе вы будете перенаправлены на панель управления firebase.

Нажмите кнопку «Создать новое приложение» и заполните форму, это перенаправит вас на панель управления вашего приложения. Нажмите кнопку с надписью «Добавить Firebase в веб-приложение», это даст вам объект конфигурации, который будет использоваться вашим приложением Ionic для подключения к нашей базе данных Firebase.

Мы собираемся создать систему AngularFire2 Authentication для эффективного управления системой аутентификации Firebase.

Установите нужные пакеты

Откройте терминал в папке проекта и выполните следующее:

$ npm install firebase angularfire2 --save

Создание страниц и поставщиков:

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

$ ionic generate page Login
$ ionic generate page Signup
$ ionic generate provider Auth

Импорт и инициализация

Теперь поработаем с файлом app / app.module.ts, сначала импортируем все необходимые модули.

import { AuthProvider } from '../providers/auth/auth'
//Importing the AF2 module
import { AngularFireModule } from 'angularfire2'
import { AngularFireAuthModule } from 'angularfire2/auth
//Importing the pages an the providers 
import { LoginPage } from '../pages/login/login';
import { AuthProvider } from '../providers/auth/auth';
import { SignupPage } from '../pages/signup/signup'
import { ForgetPage } from '../pages/forget/forget'
//AF2 setting
export const firebaseCredential = {
 apiKey: '',
 authDomain: '',
 databaseURL: '',
 storageBucket: '',
 messagingSenderId: '',
}
// Initialize the @NgModule
@NgModule({
  declarations: [
    MyApp,
    HomePage,
    LoginPage,
    SignupPage,
    ForgetPage
  ],
  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp),
    AngularFireModule.initializeApp(firebaseCredential),
    AngularFireAuthModule
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage,
    LoginPage,
    SignupPage,
    ForgetPage
  ],
  providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    AuthProvider
  ]
})
export class AppModule {}

Вы можете найти значение данных firebaseCredential в Консоли Firebase. Вы можете найти окончательный код здесь: app.module.ts.

Создание наблюдателя при проверке подлинности

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

Для этого перейдите на app / app.component.ts, сначала мы импортируем AF2:

import { AngularFireAuth } from 'angularfire2/auth'

Нам нужно увидеть, аутентифицирован ли пользователь, если пользователь аутентифицирован, мы отправим его на домашнюю страницу, а если нет, мы отправим его на LoginPage. . Что-то вроде этого;

constructor(platform: Platform, afAuth: AngularFireAuth, ....){
  afAuth.authState.subscribe(user =>{
      if(user) {
        this.rootPage = HomePage;
      } else {
        this.rootPage = LoginPage;
      }
    })
}

Полный код файла находится здесь: app.component.ts

Создание поставщика аутентификации

Провайдер похож на модуль, он централизует функцию в одном файле и помогает повторно использовать. В Provider / auth / auth.ts первое, что нужно сделать, - это импортировать все необходимые модули.

import * as firebase from 'firebase';

Теперь мы введем AF2 в конструктор, а затем создадим все функции AuthFunction в файле,

//Email and Password Login
loginUser(email: string, password: string ): Promise<any> {
    return firebase.auth().signInWithEmailAndPassword(email, password);
  }
// Reset Password Link
resetPassword(email: string): Promise<void> {
    return firebase.auth().sendPasswordResetEmail(email);
  }
// Log the user out
logoutUser(): Promise<void> {
    return firebase.auth().signOut();
  }

Вы можете найти весь код здесь: auth.ts

Создание страницы входа

login.html

login.html будет иметь две формы ввода (адрес электронной почты и пароль) и кнопку для входа пользователя в систему, мы будем использовать проверку формы с помощью Angular2 FormBuilder. Поскольку здесь я сконцентрирован на бэкэнде, вы можете найти его код здесь: login.html

login.ts

//Importing everything that is required
import { FormBuilder, Validators, FormGroup } from '@angular/forms';
import { AuthProvider } from '../../providers/auth/auth';
import { HomePage } from '../../pages/home/home';
import { SignupPage } from '../../pages/signup/signup';
import { ForgetPage } from '../../pages/forget/forget'
//variables for form validation
public loginForm: FormGroup;
public loading: Loading;
form: boolean = true;
//Injecting everything in our constructor and adding validation rules                             constructor(loadingCtrl: LoadingController,public alertCtrl: AlertController,public authProvider: AuthProvider,public formBuilder: FormBuilder....) {
    this.loginForm = formBuilder.group({
      email: [''],
      password: [''],
    });
}
// function to reset password
forget(){
    this.navCtrl.push(ForgetPage);
}
// function to redirect to signup page
signup(){
    this.navCtrl.push(SignupPage);
}

Это позволит вашему пользователю перейти на ResetPasswordPage, если он забыл свой пароль и не может войти в систему, или на SignupPage, чтобы создать новую учетную запись.

Теперь давайте сделаем функцию входа в систему,

loginUser(): void {
this.authProvider.loginUser(this.loginForm.value.email, this.loginForm.value.password)
    .then( authData =>{
      this.loading.dismiss().then( () =>{
        this.navCtrl.setRoot(HomePage);
      });
    }, error =>{
      this.loading.dismiss().then( () => {
        let alert = this.alertCtrl.create({
          message: error.message,
          buttons: [
            {
              text: "Ok",
              role: 'cancel'
            }
          ]
        });
        alert.present();
      });
    });
      this.loading = this.loadingCtrl.create({
        content: 'Searching.. please wait',
      });
      this.loading.present();
  }

Это ссылка на полный login.ts.

Создание страницы сброса пароля

Forgot.html

Это похоже на файл login.html, он также будет содержать один вход, который будет полем электронной почты. Код для файла можно найти здесь: забудьте.html

Forgot.ts

// Getting all the imports ready
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import {AuthProvider} from '../../providers/auth/auth';
import { LoginPage } from '../../pages/login/login';
// Adding the form variables
public forgotForm: FormGroup;
public loading: Loading;
// Injecting the constructor and 
constructor(public formBuilder: FormBuilder, public loadingCtrl: LoadingController, public alertCtrl: AlertController...) {
    this.forgotForm = formBuilder.group({
      email: [''],
    })
}
//the resetPassword() function
forgotPassword(){
    this.authProvider.resetPassword(this.forgotForm.value.email)
    .then(() => {
      this.loading.dismiss().then( () => {
        this.navCtrl.setRoot(LoginPage);
      });
    }, (error) => {
      let alert = this.alertCtrl.create({
        message: error.message,
        buttons: [
          {
            text: 'OK',
            role: 'cancel'
          }
        ]
      })
    });
    this.loading = this.loadingCtrl.create();
  }

Полный код этого файла: Forgot.ts

Создание страницы регистрации

signup.html

Как вы понимаете, между шаблоном регистрации и шаблоном входа нет никакой разницы, кроме их имен и имен форм, поэтому код очень похож: signup.html

signup.ts

//Importing everything we need
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { AuthProvider } from '../../providers/auth/auth';
import { AngularFireAuth } from 'angularfire2/auth';
// Adding the form variables
public signupForm: FormGroup;
public loading: Loading;
//Injecting in the constructor
constructor(public navCtrl: NavController, public afAuth: AngularFireAuth ....) {
    this.signupForm = formBuilder.group({
        email: [''],
        password: ['']
      });
  }
// the signup function
signupUser(){      this.afAuth.auth.createUserWithEmailAndPassword(this.signupForm.value.email, this.signupForm.value.password)
    .then(() => {
      this.loading.dismiss().then( () => {
        this.navCtrl.setRoot(HomePage);
      });
    }, (error) => {
      this.loading.dismiss().then( () =>{
        let alert = this.alertCtrl.create({
          message: error.message,
          buttons: [
            {
              text: 'OK',
              role: 'cancel'
            }
          ]
        });
      });
    });
    this.loading = this.loadingCtrl.create({
        content: "Creating your account! Please wait"
    });
    this.loading.present();
  }

Код этого файла: signup.ts

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

Вы можете найти весь код здесь: firebase-authentication-ionic