zoukankan      html  css  js  c++  java
  • [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;
            }
          )
      }
  • 相关阅读:
    微信小程序登录(包括获取不到unionid的情况)
    ionic生成签名的APK方法总结
    iframe的简单使用方法
    常见的浏览器端的存储技术:cookie
    AJAX 过程总结
    react相关知识总结2
    正则表达式相关知识点
    vue相关知识汇总
    react相关知识汇总
    Vue-Router核心实现原理
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6087731.html
Copyright © 2011-2022 走看看