【发布时间】:2017-12-09 06:21:42
【问题描述】:
注意:我对所有这些都是新手,请原谅可能很明显的内容。非常感谢任何帮助:)
我有什么
- 用于登录和注销的身份验证服务
- 根据用户 ID 获取项目的相册服务
- albumList > UserId > albumKey
- 在我的专辑列表服务中,我查询路径“albumList > userId”
- 登录后,一切正常,只返回基于上述匹配查询的结果
问题
- 如果我要将“localhost:4200/albums”的 URL 复制并粘贴到另一个选项卡中,控制台会显示
未捕获(承诺中):TypeError:无法读取 null 的属性“uid”
- 因此,没有加载任何内容,粘贴的 URL 也没有得到维护
问题
- 是否需要在我的所有组件中添加用户 observable?
- 如何确保在加载我的数据之前检查用户状态?
- 是否可以只使用我的 Auth.Service 作为所有其他组件的参考点?
我的身份验证服务
import { Injectable } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
import { Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class AuthService {
user: Observable<firebase.User>;
constructor(
private firebaseAuth: AngularFireAuth,
private router: Router) {
this.user = firebaseAuth.authState;
}
login(email: string, password: string) {
this.firebaseAuth
.auth
.signInWithEmailAndPassword(email, password)
.then(value => {
console.log('Nice, it worked!');
console.log(this.firebaseAuth.auth.currentUser.uid);
this.router.navigate(['/albums'])
})
.catch(err => {
console.log('Something went wrong:', err.message);
});
}
logout() {
this.firebaseAuth
.auth
.signOut();
}
}
我的专辑列表服务
注意:如果我删除最后带有用户 ID 的 AlbumList 查询(已注释掉的查询),我可以将 URL 复制并粘贴到新选项卡中,并保留 URL(url. com/专辑)。但是,任何数据都不会首先被用户键过滤。
import { Injectable } from '@angular/core';
import { AngularFireDatabase, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database';
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class ProjectsListService {
albumList: FirebaseListObservable<any[]>;
user: Observable<firebase.User>;
constructor(
private database: AngularFireDatabase,
private firebaseAuth: AngularFireAuth) {
//this.albumList = database.list('/albumList');
this.albumList = database.list('/albumList/' + this.firebaseAuth.auth.currentUser.uid);
//console.log(this.firebaseAuth.auth.currentUser.uid);
}
getAlbumList() {
return this.albumList;
}
}
【问题讨论】:
-
嗨法比奥。感谢您的回复。是的。我在这里发帖之前会进行研究,以确保我不会浪费任何人的时间。我需要帮助的是与其他组件的集成以及我收到的错误。
标签: angular firebase firebase-realtime-database firebase-authentication angularfire