2016-12-29 3 views
0

私は認証のためのAuth0と私のデータベースのAngularFireを使用してAngular2アプリを構築しています。私のコンストラクタでは、私はAngularFire afインスタンスを渡しましたが、コールバックイベントの中でアクセスすることはできません。 AngularFireインスタンスにアクセスする別の方法はありますか?Angular2 - 例外:未定義のプロパティ 'af'を読み取ることができません

// app/auth.service.ts 

import { Injectable } from '@angular/core'; 
import { tokenNotExpired } from 'angular2-jwt'; 
import { AngularFire, AuthMethods, AuthProviders } from 'angularfire2'; 


// Avoid name not found warnings 
declare var Auth0Lock: any; 
declare var Auth0: any; 

@Injectable() 
export class Auth { 
// Configure Auth0 
    lock = new Auth0Lock('AUTH0_CLIENT_ID', 'AUTH0_DOMAIN', {}); 


    constructor(private af: AngularFire) { 
    // Add callback for lock `authenticated` event 

    this.lock.on("authenticated", (authResult) => { 
     this.lock.getProfile(authResult.idToken, function(error:any, profile:any){ 
     if(error){ 
      throw new Error(error); 
     } 

     localStorage.setItem('id_token', authResult.idToken); 
     localStorage.setItem('profile', JSON.stringify(profile)); 

     var options = { 
     id_token : authResult.idToken, 
     api : 'firebase', 
     scope : 'openid name email displayName', 
     target: 'AUTH0_CLIENT_ID' 
     }; 


     var auth0 = new Auth0({domain:'AUTH0_DOMAIN', clientID:'AUTH0_CLIENT_ID' }); 
     auth0.getDelegationToken(options, function(err, result){ 

      if(!err){ 


      this.af.auth.login(result.id_token, { 
       provider: AuthProviders.Custom, 
       method: AuthMethods.CustomToken 
      }); 
      console.log(result); 
      } 
     }); 
     }); 
    }); 
    } 
} 

答えて

7

thisコールバック関数がその関数を指しているからです。

  1. クラスのこの割引:let that = thisをし、コールバック内that.afを使用する次の3つのオプションがあります。
  2. 利用ラムダそれはthisを変更しないので、:(error, profile) => {...}
  3. あなたもクラスに

をこの機能とバインドする.bindTo(this)を呼び出すことができ、私はラムダのアプローチをお勧めします。

+1

ありがとう、私は問題が何であるか把握しようとしました。 – iamarnold

関連する問題