2016-12-09 4 views
3

auth0を認証に使用する角度2のアプリがあります。問題は、ログインが成功すると、ロックコールバックが呼び出されていないように見えるということです。ページを手動で更新した後でのみ、プロファイルデータがローカルストレージに送信されます。ログイン後にauth0コールバックでプロフィールの日付が設定されていませんangular2

ユーザーがログインすると、そのプロファイルオブジェクトを取得してコンポーネントクラス内で使用する必要があります。このコードは、ログインに成功した後に手動でページを更新した後にのみ機能します。ここに私のコードは(重要な部分だけを含む)です。 documentation for ngOnInitによると

auth.service

lock = new Auth0Lock('.....9cNzyzJ3DZc2VpDyXSYF5', '.....12.auth0.com', {}); 

    user: any; 

    constructor() { 
    // Add callback for lock `authenticated` event 
    this.user = JSON.parse(localStorage.getItem('profile')); 
    this.lock.on("authenticated", (authResult:any) => { 
     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)); 
     this.user = profile; 
     }); 

    }); 
    } 

    public login() { 
    // Call the show method to display the widget. 
    this.lock.show(); 
    console.log('login func'); 
    }; 

nav.component

constructor(private auth: Auth, private groupsService: GroupsService){ 

} 

ngOnInit(){ 
    // need to access the profile object here. Ocject is correctly logged only after refreshing. 
    console.log(JSON.parse(localStorage.getItem('profile'))); 
    this.groupsService.getGroups(this.userId).subscribe(groups => { 
     this.groups = groups; 

     // sort the groups 
     this.groups.sort((a, b) => new Date(b.date_created).getTime() - new Date(a.date_created).getTime()); 
    }); 
} 
+0

ねえ同じ問題があります。これをどうやって解決しましたか? – wuno

答えて

1

ngOnInitは、ディレクティブのデータバインドプロパティがためにチェックされた直後に呼び出され初めて、そしてその子どものいずれかがチェックされる前に。 ディレクティブがインスタンス化されたときに1回だけ呼び出されます。

に(強調は私です)

認証がまだ処理されていなかったので、その実行が可能なユーザープロファイルがまだ存在しないときにことを示しています。認証後にページを更新すると、ユーザプロファイルはWeb Storageですでに使用可能になっており、マニュアルリフレッシュではngOnInitが実行され、説明したように動作します。

+0

ああ私はまた、ngOnInitからコンストラクタにコードを入れようとしましたが、同じ効果がありました。それはどこに行かなければならない? – jdoyle1331

+0

私のAngular2の知識は限られていますが、他のコンポーネントが状態の変化(ユーザープロファイルの可用性)に対応できるように、認証されたイベントを処理する必要があります。これ[質問/回答](http://stackoverflow.com/questions/34700438/global-events-in-angular-2)をチェックしてください。 –

関連する問題