码迷,mamicode.com
首页 > 其他好文 > 详细

[AngularFire2] Building an Authentication Observable Data Service

时间:2016-11-22 07:37:57      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:hid   method   efault   info   get   private   outer   str   ati   

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

 

[AngularFire2] Building an Authentication Observable Data Service

标签:hid   method   efault   info   get   private   outer   str   ati   

原文地址:http://www.cnblogs.com/Answer1215/p/6087731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!