Как сохранить пользователей вошедшими в систему навсегда с помощью Firebase в приложении ionic 4 - PullRequest
0 голосов
/ 24 февраля 2019

Я не могу найти документацию или что-то вроде того, как заставить пользователей входить в систему, используя аутентификацию с помощью firebase методом signInWithEmailAndPassword()!

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

То, что я нашел конкретным, таково:

firebase.auth().onAuthStateChanged(); 

Но я не знаю, как реализовать это с моей Службой и моей Гвардией!

Это моеСервисный код аутентификации:

import { Injectable } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import { Observable } from 'rxjs/internal/observable';
import { NavController } from '@ionic/angular';
import { ToastMessagesService } from './toast-messages.service';
import * as firebase from 'firebase';

@Injectable({
  providedIn: 'root'
})
export class AuthService {

  private user: Observable<firebase.User>;
  private userDetails: firebase.User = null;

  constructor(
    private afAuth: AngularFireAuth,
    private navCtrl: NavController,
    private statusMessage: ToastMessagesService
  ) {

    this.user = afAuth.authState;


    this.user.subscribe(
      user => this.userDetails = user || null
    )


  }

  async siginInRegular(username: string, password: string) {
    try {

      // const credentials = this.afAuth.auth.email
      return await this.afAuth.auth.signInWithEmailAndPassword(username, password).then(
        user => {
          if (user) {
            this.navCtrl.navigateForward('/home');
            this.statusMessage.message(`Welcome ${user.user.email}`);
          }
        },

        err => {
          console.log(err);
        }
      );



    } catch (error) {
      console.dir(error);
    }
  }

  async register(username: string, password: string) {
    try {
      return this.afAuth.auth.createUserWithEmailAndPassword(username, password).then(
        user => {
          this.navCtrl.navigateForward('/profile');
          this.statusMessage.message(`Welcome ${user.user.email}`);
        }
      );
    } catch (error) {
      console.dir(error);
    }
  }

  isLoggedIn(): boolean {
    return (this.userDetails != null) ? true : false
  }


}

Это и мой защитный код:

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { AuthService } from './auth.service';
import { NavController } from '@ionic/angular';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {

  constructor(
    private auth: AuthService,
    private navCtrl: NavController
  ) { }

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

    if (this.auth.isLoggedIn()) {
      return true
    }

    this.navCtrl.navigateBack('/login');
    return false;


  }
}
...