Angular 7-Auth0-parseHash响应为空

时间:2019-06-11 19:01:11

标签: angular typescript authentication auth0

Auth0问题。

我的应用程序在注销浏览器刷新后重新触发登录事件,并且用户配置文件出现问题。我在身份验证服务中将其跟踪到parseHash:

  this.auth0.parseHash({ hash: window.location.hash }, (err, authResult) => {
  ...
  }

使用ngrx效果触发:

  @Effect()
  init$ = defer(() => {
    const userData = localStorage.getItem("user");

    if (userData != null && userData != 'undefined') {
       let authActionObservable = of(new Login({user: JSON.parse(userData)}));
       this.authService.handleAuthentication();
       return authActionObservable;
    }
    this.authService.handleAuthentication();
  });

页面刷新后,this.auth0.parseHash似乎为authResult和err返回null,但在初始登录时authResult已正确填充。

从技术上讲,登录成功,并且我得到了令牌。我检查了整个配置,域等,一切似乎都很好。我还尝试使用{hash:window.location.hash}。

2 个答案:

答案 0 :(得分:1)

我经常看到捕获到的HAR文件可以帮助您准确缩小注销工作流程期间发生的情况。我可能不建议您看几件事。

  1. 查看Logout Documentation
  2. how to handle Redirects after logout上签出此文档,并评估您如何处理注销。
  3. 您需要确保将client_id参数传递到注销端点,同时在客户端级别设置允许的注销URL。

现在,在这里发生的事情的核心我可能是错的,但是袖手旁观是一个很好的基本起点。谢谢!

答案 1 :(得分:1)

问题在于,每次刷新页面时,都会重置包含服务令牌的内存变量的状态。一旦我在服务的构造函数中重新初始化了值,问题就消失了。

这里是我说的localStorage示例:

  constructor(public router: Router, private store: Store<State>, private http: HttpClient) {
    this._idToken = localStorage.getItem("Auth0IdToken");
    this._accessToken = localStorage.getItem("Auth0AccessToken");
    this._expiresAt = parseInt(localStorage.getItem("Auth0ExpiresAt"));
  }