2

angularfire2のドキュメントを読んでみましたが、ここまで来ました。私の認証サービスは angularfire.auth.login を呼び出します。私はこの関数を購読しており、返されたユーザー情報をデータベースに保存したいと考えています。

Typescript コンパイラがエラーを返します:

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
    })
  }
}

さらに情報が必要な場合はお知らせください。

最後に、お立ち寄りいただきありがとうございます。:)

4

1 に答える 1

2

GitHub で angularfire2 ソース コードを調べ、FirebaseAuthState インターフェイスを調べました。ここで見つけることができます。TypeScript インターフェイス自体には「displayName」というプロパティがないことがわかります。ただし、探しているデータを保持しているように見えるnull許容型があることを示しています

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 プロパティを詳しく見てみたいと思うと思います。詳細をよく見るために、subscribe メソッドのコードをコメント アウトし、オブジェクトをコンソールに書き込み、ブラウザー開発者ツールを使用してブラウザーで確認します。たとえば、このようなものです。

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 内のデータを詳しく見ることができます。

于 2016-08-01T04:14:32.447 に答える