Не удается прочитать uid вне метода this.afAuth.authState.subscribe (), он говорит, что uid не определен после перезагрузки страницы - PullRequest
0 голосов
/ 30 апреля 2018

* Вот мой Product.Service, который uid не определен после перезагрузки страницы, но он определен после первого входа в систему, я не знаю почему. Пожалуйста, кто-нибудь может помочь мне обнаружить эту проблему, я искал но я не нашел решения, и я спросил много людей, но никто не ответил мне, я новичок в Angular

        import { Injectable, EventEmitter, Output } from "@angular/core";
        import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database-deprecated';
        import * as firebase from 'firebase/app';
        import { AngularFireAuth } from 'angularfire2/auth';

        import { Product } from "./models/product.model";
        import { METHODS } from "http";

    @Injectable()
    export class ProductService{

        products: FirebaseListObservable<Product[]>;
        user : firebase.User;
        users : Array<any> = [];
        final_data: Array<any> = [];
        uid:string;


        constructor(
            private db: AngularFireDatabase,
            private afAuth: AngularFireAuth
            ) {
                this.afAuth.authState.subscribe(auth => {
                  if (auth !== undefined && auth !== null) {
                    this.user = auth;

                    console.log(this.user.uid);// uid is defined here
                  }
                });

                console.log(this.user.uid);// uid is undefined here


            }





           getProducts(): FirebaseListObservable<Product[]>{



                return this.db.list(`users/${this.user.uid}/products`);
           }

Вот мой компонент, который отображает продукты:

import { Component, OnInit, Input, AfterViewChecked, OnChanges } from '@angular/core';
import { Product } from '../models/product.model';
import { ProductService } from '../product.service';
import { ShoppingCartService } from './shopping-cart.service';
import { AuthServiceService } from '../auth-service.service';
import { FirebaseListObservable } from 'angularfire2/database-deprecated';
import { AngularFireAuth } from 'angularfire2/auth';

@Component({
  selector: 'app-shopping-cart',
  templateUrl: './shopping-cart.component.html',
  styleUrls: ['./shopping-cart.component.css']
})
export class ShoppingCartComponent implements OnInit, OnChanges {


  products:FirebaseListObservable<Product[]>;
  productsArray : Product[];
  sum:number = 0;

  constructor( private ProdService: ProductService, private afAuth: AngularFireAuth) {


   }

  ngOnInit() {
    this.afAuth.authState.subscribe(
      auth => console.log(auth.uid, " Shopping Cart") // uid is defined
    )


    this.products = this.ProdService.getProducts(); // uid is undefined here






  }
  ngOnChanges(){
    this.products = this.ProdService.getProducts(); // uid is undefined here





  }



}

1 Ответ

0 голосов
/ 30 апреля 2018

С Angular или SPA дело в том, что вам нужно управлять сеансом на стороне пользователя. Сервер не управляет сессиями для вас. Вам необходимо сохранить токен в локальном хранилище, а также определить токен обновления (т.е. через некоторое время истекает срок действия маркера firebase). Проверьте этот урок здесь

...