Angular Can';t在这个.afAuth.authState.subscribe()方法之外读取uid,它在我重新加载页面后表示uid未定义
*这是我的产品。服务,在我重新加载页面后uid未定义,但它是在我第一次登录后定义的,我不知道为什么,请任何人帮助我发现这个问题,我搜索了,但我没有找到解决方案,我问了很多人,但没有人回答我,我是新手Angular Can';t在这个.afAuth.authState.subscribe()方法之外读取uid,它在我重新加载页面后表示uid未定义,angular,firebase,firebase-realtime-database,angularfire2,Angular,Firebase,Firebase Realtime Database,Angularfire2,*这是我的产品。服务,在我重新加载页面后uid未定义,但它是在我第一次登录后定义的,我不知道为什么,请任何人帮助我发现这个问题,我搜索了,但我没有找到解决方案,我问了很多人,但没有人回答我,我是新手 import { Injectable, EventEmitter, Output } from "@angular/core"; import { AngularFireDatabase, FirebaseListObservable } from '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{Injectable,EventEmitter,Output}来自“@angular/core”;
从“angularfire2/数据库弃用”导入{AngularFireDatabase,FirebaseListObservable};
从“firebase/app”导入*作为firebase;
从'angularfire2/auth'导入{AngularFireAuth};
从“/models/Product.model”导入{Product}”;
从“http”导入{METHODS};
@可注射()
出口类产品服务{
产品:FirebaseListObservable;
用户:firebase.user;
用户:数组=[];
最终_数据:数组=[];
uid:字符串;
建造师(
私有数据库:AngularFireDatabase,
私人afAuth:AngularFireAuth
) {
this.afAuth.authState.subscribe(auth=>{
if(auth!==undefined&&auth!==null){
this.user=auth;
console.log(this.user.uid);//uid在这里定义
}
});
console.log(this.user.uid);//此处未定义uid
}
getProducts():FirebaseListObservable{
返回这个.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
}
}
import{Component,OnInit,Input,AfterViewChecked,OnChanges}来自“@angular/core”;
从“../models/Product.model”导入{Product};
从“../product.service”导入{ProductService};
从“./shoppingcart.service”导入{ShoppingCartService};
从“../auth service.service”导入{AuthServiceService};
从“angularfire2/数据库弃用”导入{FirebaseListObservable};
从'angularfire2/auth'导入{AngularFireAuth};
@组成部分({
选择器:“应用程序购物车”,
templateUrl:“./shopping cart.component.html”,
样式URL:['./shopping cart.component.css']
})
导出类ShoppingCartComponent实现OnInit、OnChanges{
产品:FirebaseListObservable;
productsArray:产品[];
总和:数字=0;
构造函数(私有ProdService:ProductService,私有afAuth:AngularFireAuth){
}
恩戈尼尼特(){
this.afAuth.authState.subscribe(
auth=>console.log(auth.uid,“购物车”)//uid已定义
)
this.products=this.ProdService.getProducts();//此处未定义uid
}
ngOnChanges(){
this.products=this.ProdService.getProducts();//此处未定义uid
}
}
Angular或SPA的问题是,您需要在用户端管理会话。服务器不为您管理会话。您需要将令牌存储到本地存储并定义刷新令牌(即,在firebase令牌过期一段时间后).检查本教程您是否尝试使用public而不是private afAuth?我没有工作..仍然有相同的问题