私はログインするためにsignInWithGoogleを使用しており、同時にそのユーザーがデータベースに存在するかどうかを確認しています。そうでない場合、ユーザー情報がデータベースに追加されています。firebaseデータベースで利用できるユーザーに応じてルートを変更する
ここでは、新規ユーザーの場合はsurvey
ページ、既存ユーザーの場合はprofile
ページに移動します。新しいユーザーの場合、ユーザー情報はデータベースに追加されますが、profile
ページにも移動します。新規ユーザーがsurvey
ページに移動します。
import { Component } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';
import { Router } from '@angular/router';
export class LoginComponent {
users: FirebaseListObservable<User[]>;
constructor(
private db: AngularFireDatabase,
public afAuth: AngularFireAuth,
private router: Router
) {
this.users = this.db.list('/users') as FirebaseListObservable<User[]>;
}
signInWithGoogle() {
this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider())
.then((data) => {
// Checking if the email exists in the database
this.users.subscribe(users => {
let exists = users.some(function(el) {
return el.email === data.user.email;
});
// If email does not exists in the database i.e. New user
if(!exists) {
this.router.navigate(['/survey']);
this.users.push({
email: data.user.email
})
return false;
}
else {
// If user already exists
this.router.navigate(['/profile']);
return false;
}
})
})
}
}
助けていただければ幸いです。ありがとう
で今
あなたはありがとう@RahulSingh –
をプロファイルするために他の行く調査にナビゲートしていない場合は、ルータの決意を利用すると、ユーザーが存在するかどうかをチェックたりすることはできませんあなたのコメントのために。この場合、ルータ解決を実装する方法を教えてください。 – surazzarus
ファイアベース観測にプッシュしているときに、サブスクリプション全体が、ルートが役に立たない場合は全体を再レンダリングするので、ルータでも問題が見つかりませんでした。私はそれに取り組んで同じであなたを更新します –