2

Я пробовал читать документы angularfire2 и придумал здесь. Моя служба проверки подлинности вызывает angularfire.auth.login. Я подписался на эту функцию, и я хочу сохранить возвращаемую пользовательскую информацию в базу данных.Как аутентифицировать пользователя и сохранять его данные

Машинопись компилятор возвращает ошибку:

Error: Typescript found the following errors: /Users/macbook/dev/app/kichenclub/tmp/broccoli_type_script_compiler-input_base_path-nMnfGgj9.tmp/0/src/app/auth.service.ts (12, 25): Property 'displayName' does not exist on type 'FirebaseAuthState'.

и та же для всех 'DISPLAYNAME'.

Я в правильном направлении, даже? Как еще это сделать.

authentication.service.ts:

import { Injectable } from '@angular/core'; 
import { AngularFire, AuthProviders, AuthMethods } from 'angularfire2'; 

@Injectable() 
export class AuthService { 
    private userModel= this.af.database.object('/users'); 
    constructor(private af: AngularFire) { 
    this.af.auth.subscribe((auth) => { 
     console.log(auth); 
     this.userModel.set({ 
     uid: auth.uid, 
     firstName: auth.displayName.split(0, auth.displayName.lastIndexOf(' ')), 
     lastName: auth.displayName.split(auth.displayName.lastIndexOf(' '), auth.displayName.length), 
     displayPic: auth.photoURL, 
     provider:auth.provider 
     }); 
    }); 
    } 

    public loginFacebook(): void { 
    this.af.auth.login({ 
     provider: AuthProviders.Facebook, 
     method: AuthMethods.Popup 
    }) 
    } 
} 

Дай мне знать, если требуется дополнительная информация.

И наконец, спасибо, что остановились. :)

ответ

2

Я взглянул на исходный код angularfire2 на GitHub, и я исследовал интерфейс FirebaseAuthState, вы можете найти его here. Вы можете видеть, что сам интерфейс TypeScript не имеет свойства, называемого displayName. Однако это показывает, что там обнуляемых типы, которые появляются для хранения данных, которые вы ищете

export interface FirebaseAuthState { 
    uid: string; 
    provider: AuthProviders; 
    auth: firebase.User; 
    expires?: number; 
    github?: CommonOAuthCredential; 
    google?: GoogleCredential; 
    twitter?: TwitterCredential; 
    facebook?: CommonOAuthCredential;//<---based on your code I think this is what you're looking for. 
    anonymous?: boolean; 
} 

Я думаю, что вы хотите, чтобы повнимательнее взглянуть на свойства auth.facebook. Чтобы лучше ознакомиться с деталями, я просто прокомментирую код в методе подписки и просто напишу объект на консоль и посмотрю на него в браузере с помощью инструментов разработчика браузера. Например, что-то вроде этого.

this.af.auth.subscribe((auth) => { 
    console.log(auth); 
    //this.userModel.set({ 
    //uid: auth.uid, 
    //firstName: auth.displayName.split(0, auth.displayName.lastIndexOf(' ')), 
    //lastName: auth.displayName.split(auth.displayName.lastIndexOf(' '), auth.displayName.length), 
    //displayPic: auth.photoURL, 
    //provider:auth.provider 
    //}); 
}); 

Это позволит вам ближе ознакомиться с данными внутри auth.facebook.

+0

Thanks @dan. Вообще-то, я прошел через журнал и прошел. Фактически, я пропустил, что 'auth.auth' фактически хранит данные. Виноват. Наверное, я был на кофеине, чтобы пропустить это. :п – ankitjain11