Firebase 및 Angular의 최신 버전을 사용하려고합니다. 달성하고자하는 전반적인 개념은 관리자 인증입니다. 나는 로그인 로그 아웃 기능을 달성했다. googleAuth 로그인 사용자를 UID가있는 데이터베이스에 저장했습니다. 이제 내가하려는 것은 일부 페이지를 로그인 및 관리로 제한하는 것입니다. 그래서 isAdmin : true를 데이터베이스에 저장된 사용자 객체의 값으로 할당했습니다. 기본적으로 나는 사용자가 admin인지 확인하고 라우터 params에 대해 true 또는 false를 반환하려고합니다. Angular과 Firebase을 켜고 끔 사용하고 있습니다. 나는 나 자신을 초심자로 생각할 것이다. , 내가 함수가 객체를 반환 가져 오기를 이해 생각에서오류 TS2345 사용자가 isAdmin인지 각도 AngularFire2 확인
ERROR in src/app/admin-auth-guard.service.ts(15,38): error TS2345: Argument of type '(user: User) => AngularFireObject<AppUser>' is not assignable to parameter of type '(value: User, index: number) => ObservableInput<{}>'.
Type 'AngularFireObject<AppUser>' is not assignable to type 'ObservableInput<{}>'.
Type 'AngularFireObject<AppUser>' is not assignable to type 'ArrayLike<{}>'.
Property 'length' is missing in type 'AngularFireObject<AppUser>'.
하지만 :> AngularFire 5. 내가 점점 오전 현재 오류가 TS2345이다 - 나는 아주 AngularFire2 4에서 마이그레이션하는 방법을 이해할 수 없다 오류가 관찰 가능을 기대하고 있습니다. 내가 관찰 할 수있는 것에 대해 알고있는 것은 당신이 그들을 구독 할 수 있고 그것들을 파괴해야한다는 것입니다 ...
데이터베이스에 쿼리하고 uid와 일치하는 사용자 개체를 반환하기 위해 현재 로그인 한 사용자 ID를 사용해야합니다. isAdmin이 true 또는 false 인 경우 그런 다음 경로 매개 변수로 반환하여 페이지를 인증 된 및 관리자로 제한 할 수 있습니다.
올바른 방향으로 알려주십시오.
관리 - 인증 - guard.service.ts
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import { AuthService } from './auth.service';
import { UserService } from './user.service';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class AdminAuthGuardService implements CanActivate {
constructor(private auth: AuthService, private userService: UserService) { }
canActivate(): Observable<boolean> {
return this.auth.user$.switchMap(user => this.userService.get(user.uid)).map(appUser => appUser.isAdmin);
}
}
user.service.ts
import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireObject } from 'angularfire2/database';
import * as firebase from 'firebase';
import { Observable } from 'rxjs/Observable';
import { AppUser } from './models/app-user';
@Injectable()
export class UserService {
constructor(private db: AngularFireDatabase) { }
save(user: firebase.User) {
this.db.object('/users/' + user.uid).update({
name: user.displayName,
email: user.email
});
}
get(uid: string): AngularFireObject<AppUser> {
return this.db.object('/users/' + uid);
}
}
이 내가 도움을 사용하고있는 것입니다 : https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md
내가 돈 ' 주석이 작성된 함수에 대해 정확히 어떻게 작동하는지 이해합니다. "observable"에 대한 참조에서 이것은 canActivate() 함수가 Observable에서 확장되어 부울 (true/false)을 반환해야 함을 의미합니다.
감사합니다.
하는'시도 수 (UID : 문자열) : 하나의 오류가 감사 멀리 이동했다 any' –
@BougarfaouiElhoucine을! 새로운 것이 나타났습니다. "src/app/admin-auth-guard.service.ts (15,101)의 오류 : 오류 TS2339 : 'isAdmin'속성이 '{}'유형에 없습니다." – alex
답변보기. –