首頁  >  文章  >  web前端  >  Angular中的Firebase身份驗證

Angular中的Firebase身份驗證

藏色散人
藏色散人原創
2019-01-23 13:51:342261瀏覽

Firebase提供了一種在應用程式中設定身份驗證的簡單方法。在這裡,我們將探討如何使用AngularFire2函式庫為Angular 2 應用程式設定簡單的電子郵件/密碼註冊和身分驗證工作流程  。

Angular中的Firebase身份驗證

第一步是建立一個新的Firebase項目,並在Firebase控制台的「驗證」部分下啟用電子郵件/密碼登入方法。

讓我們開始使用npm安裝必要的套件。這會將Firebase SDK,AngularFire2和promise-polyfill依賴項加入您的專案:

$ npm install firebase angularfire2 --save
$ npm install promise-polyfill --save-exact

現在讓我們將Firebase API和專案憑證新增到專案的環境變數中。如果您點擊新增Firebase到您的網路應用,您可以在Firebase控制台中找到這些值:

src/environments/environment.ts

export const environment = {
  production: false,
  firebase: {
    apiKey: 'XXXXXXXXXXX',
    authDomain: 'XXXXXXXXXXX',
    databaseURL: 'XXXXXXXXXXX',
    projectId: 'XXXXXXXXXXX',
    storageBucket: 'XXXXXXXXXXX',
    messagingSenderId: 'XXXXXXXXXXX'
  }};

然後我們將使用AngularFireModule和AngularFireAuthModule來配置我們的app模組。另請注意,我們正在導入並提供AuthService。我們接下來會建立該服務:

app.module.ts

// ...

import { AngularFireModule } from 'angularfire2';
import { environment } from '../environments/environment';
import { AngularFireAuthModule } from 'angularfire2/auth';

import { AuthService } from './auth.service';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    // ...
    AngularFireModule.initializeApp(environment.firebase),
    AngularFireAuthModule
  ],
  providers: [AuthService],
  bootstrap: [AppComponent]
})
export class AppModule { }

建立Auth服務

##我們的服務將是一個允許我們登錄,註冊或註銷用戶的中心位置,因此我們將為這3個操作定義方法。所有的身份驗證邏輯都將在服務中,這將允許我們創建不需要實現任何身份驗證邏輯的元件,並有助於保持我們的元件簡單。

您可以使用此命令使用Angular CLI為服務建立框架:

$ ng g s auth

這是服務的實現,利用AngularFireAuth:

auth.service.ts

import { Injectable } from '@angular/core';

import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';

import { Observable } from 'rxjs/Observable';

@Injectable()
export class AuthService {
  user: Observable<firebase.User>;

  constructor(private firebaseAuth: AngularFireAuth) {
    this.user = firebaseAuth.authState;
  }

  signup(email: string, password: string) {
    this.firebaseAuth
      .auth
      .createUserWithEmailAndPassword(email, password)
      .then(value => {
        console.log(&#39;Success!&#39;, value);
      })
      .catch(err => {
        console.log(&#39;Something went wrong:&#39;,err.message);
      });    
  }

  login(email: string, password: string) {
    this.firebaseAuth
      .auth
      .signInWithEmailAndPassword(email, password)
      .then(value => {
        console.log(&#39;Nice, it worked!&#39;);
      })
      .catch(err => {
        console.log(&#39;Something went wrong:&#39;,err.message);
      });
  }

  logout() {
    this.firebaseAuth
      .auth
      .signOut();
  }

}

您會注意到AngularFireAuth.auth上可用的方法都會傳回promise,因此我們可以使用then和catch分別處理成功和錯誤狀態。

我們在這裡使用createUserWithEmailAndPassword和signInWithEmailAndPassword,因為我們正在設定電子郵件/密碼驗證,但可以透過Twitter,Facebook或Google進行相同的方法進行身份驗證。

元件類別和範本

既然我們的auth服務已經到位,那麼建立一個允許登錄,註冊或登出的元件非常簡單:

app.component.ts

import { Component } from &#39;@angular/core&#39;;
import { AuthService } from &#39;./auth.service&#39;;

@Component({ ... })
export class AppComponent {
  email: string;
  password: string;

  constructor(public authService: AuthService) {}

  signup() {
    this.authService.signup(this.email, this.password);
    this.email = this.password = &#39;&#39;;
  }

  login() {
    this.authService.login(this.email, this.password);
    this.email = this.password = &#39;&#39;;    
  }

  logout() {
    this.authService.logout();
  }
}

我們在元件的建構子中註入服務,然後定義呼叫auth服務上的等效方法的本機方法。我們使用public關鍵字而不是private關注服務,以便我們也可以直接從模板存取服務屬性。

模板非常簡單,並使用authService的使用者物件上的非同步管道來確定是否有登入使用者:

app.component.html

<h1 *ngIf="authService.user | async">Welcome {{ (authService.user | async)?.email }}!</h1>

<div *ngIf="!(authService.user | async)">
  <input type="text" [(ngModel)]="email" placeholder="email">
  <input type="password" [(ngModel)]="password" placeholder="email">

  <button (click)="signup()" [disabled]="!email || !password">
    Signup
  </button>

  <button (click)="login()" [disabled]="!email || !password">
    Login
  </button>
</div>

<button (click)="logout()" *ngIf="authService.user | async">
  Logout
</button>

我們的輸入欄位使用ngModel和框架語法中的banana,雙向綁定到元件類別中的電子郵件和密碼值。

完成!使用Firebase身份驗證為您的應用程式新增身份驗證就是這麼簡單!

以上是Angular中的Firebase身份驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn