2017-04-04 39 views
5

Tôi đã cố gắng để thiết lập các thuộc tính tùy chỉnh người dùng hoặc các thuộc tính sử dụng auth.updateProfile phương pháp nhưng nó chỉ lưu displayName tài sản bởi vì nó đề cập trong nó docs:Angular2 căn cứ hỏa lực Set tài Tuỳ chỉnh Propertise

this.af.auth.createUser({ 
    email: formData.value.email, 
    password: formData.value.password, 
}).then((user) => { 
    let userProfile = formData.value; 
    userProfile.role = AuthService.ROLE_PATIENT; 
    userProfile.displayName = `${formData.value.firstName} ${formData.value.lastName}`; 
    user.auth.updateProfile(userProfile).then(function(){ 
    this.router.navigate(['/']); 
}); 

Bây giờ vấn đề như thế nào tôi có thể thiết lập các thuộc tính tùy chỉnh của người dùng để tôi có thể nhận chúng trong FirebaseAuthState

Câu hỏi: Tại sao tôi cần lưu thuộc tính tùy chỉnh với từng người dùng?

trả lời: Bởi vì tôi đang làm việc với Auth Guard để kích hoạt một con đường đặc biệt sử dụng role tài sản đó được lưu trong cơ sở dữ liệu ví dụ:

canActivate(route: ActivatedRouteSnapshot, 
       state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { 
    //Currently I'm using this which only check that user is logged in or not 
    return this.auth 
     .take(1) 
     .map((authState: FirebaseAuthState) => !!authState) 
     .do(authenticated => { 
     if (!authenticated) this.router.navigate(['/login']); 
     }); 
    } 

Nhưng tôi muốn một séc hơn để xác nhận người dùng có vai trò của bệnh nhân mà tôi đã lưu khi tạo người dùng ở trên, ví dụ: return user.role == 'patient'

+0

Bảng điều khiển Firebase và Bảng điều khiển đám mây của Google sử dụng các quyền và vai trò cơ bản giống nhau. Ở cấp độ cao, đây là chủ sở hữu, người chỉnh sửa và người xem. –

+0

sẽ không giải quyết được vấn đề của tôi, bạn có thể có một giải pháp hay lý thuyết phù hợp để đóng vai trò cụ thể không? –

+0

Bạn không thể kết hợp chúng với nhau được không? – Chrillewoodz

Trả lời

1

Nhà cung cấp nhận dạng hiện tại trong Xác thực Firebase không có cách nào để thêm thuộc tính tùy chỉnh. Nếu bạn muốn thêm thuộc tính tùy chỉnh, bạn sẽ phải triển khai nhà cung cấp nhận dạng tùy chỉnh (xem minting custom tokens in a trusted processsigning in with a custom token) HOẶC thực hiện client-side look-up of the additional information from an alternate data source (chẳng hạn như Cơ sở dữ liệu Firebase).

0

Có lẽ bạn có thể làm một cái gì đó như thế này:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { 
    //Currently I'm using this which only check that user is logged in or not 
    return this.auth 
     .take(1) 
     .map((authState: FirebaseAuthState) => { 

     return this.af.database.list('/path/to/account').first().map((account: IAccount) => { 

      if (authState && account.role === 'patient') { 
      return true; 
      } 
      else { 
      return this.router.navigate(['/login']); 
      } 
     }); 
     }); 
    } 

Đó là khá xa vời nhưng nó có thể chỉ làm việc. Hoặc giúp bạn trên đường đi tìm câu trả lời.

Các vấn đề liên quan