Я создал приложение, используя Angular 7 и crud with firestore. Все отлично работает с одним пользователем. Теперь я пытаюсь масштабировать его и связывать данные с каждым зарегистрированным пользователем. Я не могу найти подробный материал в Интернете.
У меня есть пользователи в коллекции. Я хочу создать коллекцию «отпусков» и поместить ее под каждого пользователя, для его коллекции отпусков. Я считаю, что первый шаг - это получить текущий зарегистрированный пользовательский uid и обновить любую функцию, которая у меня может быть, для редактирования коллекции, а затем .doc («текущий идентификатор пользователя»).
Это код, который я использовал для получения идентификатора текущего пользователя:
this.userID = this.firestore.collection('users').doc(this.auth().user.uid);
ошибки в прекомпиляторе:
1- Тип 'AngularFirestoreDocument <{}>' нельзя назначить типу
'Строка'
2 - Невозможно вызвать выражение, тип которого не имеет подписи вызова. Тип
«AuthService» не имеет совместимых подписей вызовов.
В настоящее время структура данных такова:
Это служба авторизации:
export class AuthService {
user$: Observable<User>;
constructor(
public afAuth: AngularFireAuth,
public afs: AngularFirestore,
public router: Router
) {
// Get the auth state, then fetch the Firestore user document or return null
this.user$ = this.afAuth.authState.pipe(
switchMap(user => {
// Logged in
if (user) {
return this.afs.doc<User>(`users/${user.uid}`).valueChanges();
} else {
// Logged out
return of(null);
}
})
)
}
googleLogin() {
const provider = new auth.GoogleAuthProvider()
return this.oAuthLogin(provider);
}
public oAuthLogin(provider) {
return this.afAuth.auth.signInWithPopup(provider)
.then((credential) => {
this.updateUserData(credential.user)
})
}
public updateUserData(user) {
// Sets user data to firestore on login
const userRef: AngularFirestoreDocument<User> = this.afs.doc(`users/${user.uid}`);
const data = {
uid: user.uid,
email: user.email,
displayName: user.displayName,
photoURL: user.photoURL
}
return userRef.set(data, { merge: true })
}
}
Ценю вашу помощь.