auth0回调在登录angular2

时间:2016-12-09 23:01:55

标签: node.js angular authentication auth0

我有一个角度2应用程序,它使用auth0进行身份验证。我遇到的问题是,当成功登录时,似乎没有调用锁回调。只有在我手动刷新页面后,才会将配置文件数据发送到本地存储。

当用户登录时,我需要抓取该配置文件对象并在组件类中使用它。只有在成功登录后手动刷新页面后,此代码才有效。这是我的代码(仅包括重要部分)。

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

1 个答案:

答案 0 :(得分:1)

根据documentation for ngOnInit

  在第一次检查指令的数据绑定属性之后,以及在检查其任何子项之前,立即调用<{ngOnInit仅在实例化指令时调用一次。

(重点是我的)

这表示当它运行时,还没有可用的用户配置文件,因为仍未处理身份验证。如果在身份验证后导致页面刷新,则Web Storage中已存在用户配置文件,手动刷新会导致ngOnInit执行,从而导致您所描述的行为。