【问题标题】:Angular 4 + Firebase2 AuthenticationAngular 4 + Firebase2 身份验证
【发布时间】:2018-03-14 03:53:04
【问题描述】:

我在尝试学习使用 angular + firebase 对用户进行身份验证时遇到了麻烦。

我在终端中通过 ng serve 运行 Angular 应用时收到此错误消息。

错误 /Users/.../Desktop/angular/fireauth/node_modules/angularfire2/angularfire2.d.ts (2,10):模块 '"/Users/.../Desktop/angular/fireauth/node_modules/@angular/core/index"' 没有导出成员“InjectionToken”。

错误 /Users/.../Desktop/angular/fireauth/node_modules/angularfire2/firebase.app.module.d.ts (1,10):模块 '"/Users/.../Desktop/angular/fireauth/node_modules/@angular/core/index"' 没有导出成员“InjectionToken”。

【问题讨论】:

  • 您使用的是哪个版本的 angularfire?
  • 4.0.0-rc.2 是最新版本
  • 请在这里显示一些代码,在哪里以及如何使用InjectionToken,让我们知道您使用的是哪个版本的angularfire2会很有帮助。

标签: angular typescript firebase angularfire


【解决方案1】:

我遇到了同样的错误。对我来说,我尝试从 angularFire2/... 而不是 angularfire2/... 导入的文件中有一个错字,导致错误发生。

这是一个基本的 Angular Firestore 设置示例。

安装 angularfire2 和 firebase

npm install firebase angularfire2 --save

环境/environment.ts

export const environment = {
  production: false,
  firebase: { // add your api stuff here
    apiKey: '<your-key>',
    authDomain: '<your-project-authdomain>',
    databaseURL: '<your-database-URL>',
    projectId: '<your-project-id>',
    storageBucket: '<your-storage-bucket>',
    messagingSenderId: '<your-messaging-sender-id>'
  }
}

app.module.ts

导入以及您导入的任何其他内容

// Firebase Modules
import { AngularFireModule } from 'angularfire2';
import { AngularFirestoreModule } from 'angularfire2/firestore';
import { AngularFireAuthModule } from 'angularfire2/auth';
// Auth Service
import { AuthService } from './services/auth.service';
// Environment with firebase api key
import { environment } from './../environments/environment';

模块导入和提供程序数组

imports: [
  BrowserModule,
  AngularFireModule.initializeApp(environment.firebase),
  AngularFirestoreModule.enablePersistence(),
  AngularFireAuthModule,
  RouterModule.forRoot(appRoutes)
]
providers: [
  AuthService,
]

您的 Firestore 身份验证服务

import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { User } from './../../models/user.interface';
import * as firebase from 'firebase/app';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFirestore, AngularFirestoreDocument } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/switchMap';

@Injectable()
export class AuthService {

  constructor (
    private afAuth: AngularFireAuth,
    private afs: AngularFirestore,
    private router: Router
  ) { }
  // Your authentication logic here.
}

最后但同样重要的是,确保您在 Firebase 控制台中正确设置了读写规则。并从 firebase 控制台启用一项或多项登录服务。

来自 console.firebase.google.com/project stuff/database/firestore/rules

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

之后,只需导入您的身份验证服务并将其传递到组件构造函数中,无论您需要使用身份验证服务。

当我遇到同样的错误时,这是​​因为从 angualrFire2 导入内容时出错。它在运行 ng serve 时也抛出了一个错误,表明该应用程序有多个模块,这些模块只是以防万一。意思是我试图从 angularfire2/... 和 angularFire2/... 导入希望你能找到你的错误。

只是一个简短的说明您还可以编写一个通用的 firestore 服务来处理您的应用程序的所有 crud 操作,其方式与我们创建自定义身份验证服务的方式类似。

【讨论】:

  • 注意:您不需要在任何地方包含 injectionToken。它在 angularFire2 中使用,如果您使用 angularfire2 设置错误,则会引发该错误。
猜你喜欢
  • 1970-01-01
  • 2016-02-05
  • 2018-06-27
  • 2018-02-12
  • 1970-01-01
  • 2018-06-30
  • 2016-09-28
  • 2017-12-13
  • 2018-03-16
相关资源
最近更新 更多