[AngularFire2] Building an Authentication Observable Data Service

After successfully login, we want something help to check whether user has already login or not. And we will use Observable to do that.

Create AuthInfo.ts:

export class AuthInfo {
  constructor(private uid$: string){

  }

  isLoggedIn() {
    return !!this.uid$;
  }
}

The class is very simple, accpets an uid which return from FirebaseAuth, and a method to check whether id is set already.

TO user Observable to handle the data:

AuthService.ts:

  static UNKNOW_USER = new AuthInfo(null); // Create a default unknow user
  public authInfo$: BehaviorSubject<AuthInfo> = new BehaviorSubject<AuthInfo>(AuthService.UNKNOW_USER); // We user BehaviorSubject to to conver to Observable, Behavior Subject already needs a default value, so we can repersent logout status by using default value
  login(email, password) {

    return this.fromFirebaseAuthPromise(this.auth$.login({
      email, password
    },{
      method: AuthMethods.Password,
      provider: AuthProviders.Password
    }));
  }

  fromFirebaseAuthPromise(promise) {
    const subject = new Subject<any>();

    promise.then((res) => {
      const uid = this.auth$.getAuth().uid;
      const authInfo = new AuthInfo(uid);
      this.authInfo$.next(authInfo);
      subject.next(res);
      subject.complete();
    }, err => {
      this.authInfo$.error(err);
      subject.error(err);
      subject.complete();
    });

    return subject.asObservable();
  }

Everytime,we successfully login, will emit a uid.

So to show / hide show content based on ‘authInfo$‘, we can do:

      <md-list-item>
        <a
          *ngIf="authInfo$.isLoggedIn()"
          [routerLink]="[‘/heros‘, {outlets: {‘wiki‘: null}}]"
          routerLinkActive="active"
          [routerLinkActiveOptions]="{exact: true}"
        >Heros</a>
      </md-list-item>
  authInfo$;
  constructor(private auth: AuthService){
      this.auth.authInfo$.subscribe(
        res => {
          this.authInfo$ = res;
        }
      )
  }
时间: 2024-10-28 04:15:11

[AngularFire2] Building an Authentication Observable Data Service的相关文章

MS MDS系列之初识MS Master Data Service(微软主数据服务)

背景介绍: 主数据服务(Master Data Services)是微软平台支持的主数据管理(MDM)平台.类似MDS这样的系统,如果后续维护得当,会给企业提供一个强大的中心数据库系统,来防止企业数据变得不同步或不一致:同时也是企业内部管理数据流的可靠方式. 目前一个企业很多时候通过良性循环或者收购来实现业务增长.无论哪种方式,都将增加企业应用程序的数据流的数量和复杂度.如果断开和分离这些系统,将带来的各种问题,如数据不一致.数据数据碎片.数据不准确等等,并且对IT部门来讲,也会面对越来越多的困

Custom Data Service Providers

Custom Data Service Providers Introduction Data Services sits above a Data Service Provider, which is responsible for interacting with the underlying Data Source on behalf of the Data Service. Data Services ships with some internal providers, and mak

自定义Data Service Providers

自定义Data Service Providers 作者:AlexJ 翻译:谈少民 原文链接:http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx 简介 Data Services 建立于 Data Service Provider(数据服务提供者)之上,他负责Data Service与数据源之间的通讯. Data Services内置了一些提供者,而且也允许你自定

WCF Data Service ----理论准备

WCF数据服务(WCF Data Service )是.NET Framework的一个组件. 可以使用此组件创建一些服务,利用开放式数据协议(OData)来借助具象状态传输(REST)语义通过Web或Intranet公开和使用数据. OData(Open Data Protocol)开放数据协议 OData将数据公开为可通过URI寻址的资源,可使用GET.PUT.POST和DELETE这些标准HTTP谓词来访问和更改数据. OData使用Entity Data Model的实体关系约定,将资源

ADO.NET Data Service

关于ADO.NET Entity Framework部分的内容见ADO.NET Entity Framework(1-4) http://www.cnblogs.com/foundation/archive/2008/10/06/1304718.html 本文例子下载: http://files.cnblogs.com/wxwinter/lz.rar 目录 1    ADO.NET Data Service介绍    2 2    创建DataService项目    3 2.1    数据表 

Silverlight 2 (beta1)数据操作(3)——使用ADO.NET Data Service (Astoria)进行数据CRUD操作

目录 导言 软件需求 在SQL 2005中创建数据库 在Visual Studio 2008中创建Silverlight工程和ADO.NET Data Service 创建一个XMLHttpRequestWrapper类 在Silverlight中使用Astoria进行CRUD操作 导言 Silverlight 2支持JSON.Web Service.WCF以及Sockets等新特性对数据CRUD操作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中

调用WCF Data Service的几点Tips

使用Linq实现sql in statement的时候,用EF的时候可以通过Contains.Exists的方法实现.但是在使用WCF Data Service的context的时候,会报不支持该方法的错误.解决方案就是加上AsEnumerable(). var products = from p in ctx.V_Product.AsEnumerable() where catalogs.Exists(c => c.CatalogID == p.CatalogID) select p 主从表级

开发客户端Data Service

服务提供了元数据查询 --myservice.svc/$metadata .net客户端:通过使用代理生成工具生成代理类 --datasvcutil /uri:<uri> /out:<directory/filename> AJAX客户端:通过javascript脚本库进行访问 --Data Service AJAX Liabrary --可以从Codeplex上下载

salesforce lightning零基础学习(六)Lightning Data Service(LDS)

本篇可参看:https://trailhead.salesforce.com/modules/lightning_data_service Lightning中针对object的detail页面,一个lightning app可能包含了多个components,多个components不可避免的会对这个数据进行CRUD操作,如果我们针对每个component都在init操作时后台SQL进行查询,然后赋值给前台变量,进行CUD操作时,还要考虑其他component的数据是否要级联的改变,这种操作以