如何验证用户并保存他们的详细信息

How to authenticate user and save their details

我已经尝试阅读 angularfire2 文档,并一直走到这里。我的身份验证服务调用 angularfire.auth.login。我已经订阅了这个功能,我想将返回的用户信息保存到数据库中。

Typescript 编译器returns 错误:

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

如果需要任何进一步的信息,请告诉我。

最后,感谢您的光临。 :)

我查看了 GitHub 上的 angularfire2 源代码并检查了 FirebaseAuthState 接口,您可以找到它 here。可以看到TypeScript Interface本身并没有一个叫'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 属性。为了更好地了解细节,我会简单地注释掉您的订阅方法中的代码,并将对象写入控制台并使用浏览器开发人员工具在您的浏览器中查看它。例如这样的东西。

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 中的数据。