Как реализовать аутентификацию firebase для всех страниц? - PullRequest
1 голос
/ 02 марта 2020

Я использую Аутентификацию Firebase для своего сайта. Когда пользователь хочет создать новую учетную запись, войти или выйти, он может сделать это на странице входа. Но когда я вызываю функцию для получения текущего пользователя на другой странице (индекс), он становится пустым ->, что означает, что он не вошел в систему. Когда я затем go вернусь на страницу входа, пользователь войдет в систему как обычно. Как я могу убедиться, что пользователь вошел на все страницы сайта? Спасибо!

firebase.auth().onAuthChanged(function(user) {
    if(user) {
        console.log("logged in");
    } else {
        console.log("logged out");
    }
})

оба файла связаны с этим javascript.

1 Ответ

1 голос
/ 02 марта 2020

Вы должны добавить файл защиты с функцией CanActivate

guard.ts

import { Injectable } from '@angular/core';  
    import {  CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router';  
    import { Observable } from 'rxjs';  
    import { AuthService } from 'src/app/services/auth.service';

    @Injectable({   providedIn: 'root' }) export class AdminGuard implements CanActivate {   constructor(private authService: AuthService, private router: Router) {}

      canActivate(
        next: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean | UrlTree {
          const currentUser = this.authService.isAuthenticated();
          if (currentUser) {
          return true;
        } else {
          return this.router.parseUrl('/sign-in');
        }

      } }

auth.service.ts

  getCurrentUserToken() {
      firebase.auth().currentUser.getIdToken()/*.getToken()*/
      .then(
        (token: string) => {
          localStorage.setItem('isLoggedIn', JSON.stringify(token));
        }
      );
      localStorage.getItem('UserisLoggedNotIn');
    }

    isAuthenticated(): boolean {
       return (localStorage.getItem('isLoggedIn')) ? true : false;
       // return (this.userId) ? true : false;
    }

isAuthenticated(): boolean {
       return (localStorage.getItem('isLoggedIn')) ? true : false;
       // return (this.userId) ? true : false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...