私はFirebaseを使用してイオンアプリを構築し、そのためAngularFire2です。 Angularfire2では、認証が可能ですが、それは観測可能であり、ユーザオブジェクトを取得するために登録する必要があります。問題は、.subscribe
が同じスコープにあるように見えないため、this.user = user
を設定できないように見えることです。AngularFire観測は/購読 - 同じスコープ内でクラス変数を設定しない
ここでは、auth.ts
とapp.component.ts
があります。
app.component.ts
export class MytApp {
rootPage: any = TabsPage;
signinPage = SigninPage;
@ViewChild('nav') nav: NavController;
userProfile: any = null;
constructor(private platform: Platform,
private menuCtrl: MenuController,
private statusBar: StatusBar,
private splashScreen: SplashScreen,
private authService: AuthService) {
// this.authService.user.subscribe((user: firebase.User) => {
// var user = authService.user;
// if (user) {
// this.userProfile = user;
// this.onLoad(TabsPage);
// } else {
// this.userProfile = null;
// this.onLoad(SigninPage);
// }
// });
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
statusBar.styleDefault();
splashScreen.hide();
var user = authService.user; /* HERE */
console.log(user);
if (user) {
this.userProfile = user;
this.onLoad(TabsPage);
} else {
this.userProfile = null;
this.onLoad(SigninPage);
}
});
}
}
:私のサービスでは、私は、
auth.ts
export class AuthService {
// user: Observable<firebase.User>;
user: object = {
displayName: null,
email: null,
emailVerified: null,
photoUrl: null,
uid: null
};
constructor(private facebook: Facebook,
private googlePlus: GooglePlus,
private platform: Platform,
private afAuth: AngularFireAuth) {
// this.user = afAuth.authState;
afAuth.authState.subscribe((user: firebase.User) => {
if (!user) {
this.user = null;
return;
}
this.user = {
displayName: user.displayName,
email: user.email,
emailVerified: user.emailVerified,
photoUrl: user.photoURL,
uid: user.uid
}
});
}
と私のapp.component.tsでの認証しますご覧のとおり、var user = authService.user;
の直後に私はconsole.log(user);
を実行して、私が得るのは:
にconsole.log(ユーザ)。
displayName: null,
email: null,
emailVerified: null,
photoUrl: null,
uid: null
私はFirebaseにユーザデータをターゲティングするためのユーザオブジェクトを使用するので、それは必要です。問題は、ユーザーオブジェクトが更新されていないことです。つまり、afAuth.authState.subscribe((user: firebase.User) => {}
の「範囲」外です。
どのように私は購読できず、単にユーザーオブジェクトを取得するか、サブスクリプションからデータを抽出して、他のコンポーネントから(サービスであるため)簡単に取り出すことができますか?助けてください!
ねえ、感謝を!これは、私が 'uid'を使いたい場合には、ユーザの購読者の中の私のfirebase関数の全てを入れなければならないということですか?したがって、 'db.list(this.user.uid + '/ Lists /');を呼び出す" addNewList() "や" deleteList() "のようなものがありますか? – Kenny
@Kenny techincallyはい、しかし、 'FireBaseListService'というサービスに' firebase'関数をラップすると 'FireBaseListService'に' AuthService'を注入することができます。そして、あなたは 'switchMap'を使うことができます。これにより、サービスに登録する必要はなくなります。また、 'Observables'をコンポーネントに渡して処理することができます。 – CozyAzure