在组件中抛出http 404后,角度重定向到较早的URL

时间:2018-08-03 09:09:24

标签: angular angular6 angular-httpclient

抱歉,想不出更好的问题标题来解释这个问题。

设置

  • 托管在http://localhost:4200上的Angular应用程序(主页由HomeComponent提供服务,并显示一个按钮,该按钮允许使用OAUTH通过第三方进行登录)
  • 路由:

    {
        path:'',
        component:HomeComponent
    }, {
        path:'callback',
        component:CallbackComponent
    }, {
        path: 'show-account',
        component: ShowAccountComponent
    }, {
        path: 'create-account',
        component: CreateAccountComponent
    }
    
  • 成功登录后,第三方IDM重定向到“ http://localhost:4200/callback

  • 回调组件获取令牌等,并将其存储在本地,并验证用户是否已经存在于后端(对后端的REST API调用)

  • 后端REST API抛出(404)以表示缺少的用户帐户。 200确定以返回现有帐户

  • 如果来自后端HTTP REST服务的响应为200 OK,那么一切正常(即回调组件进一步重定向到ShowAccountComponent。

问题

如果该帐户在后端存储中不存在,则REST API会返回404,该代码会被角度代码捕获,并且该应用程序会进一步重定向到CreateAccountComponent。

但是,在此之后,我发现该应用程序再次尝试调用/ callback路由,并再次经历“捕获令牌并存储在本地”流。由于现在浏览器URL(location.href)中不再有令牌,因此在读取令牌等时失败。

我无法理解为什么在HTTP 404的情况下应用程序再次尝试返回回调路由(实际上,对于任何非200 HTTP响应都正在发生这种情况)。

在非200状态代码的情况下,我感觉到某些HttpClient行为,我不知道或无法理解。

感谢您提供任何帮助来解决上述问题。

更新

这是调用后端服务以检查帐户是否存在的代码

async getUserAccountFromStore(loggedInUserAccount: UserAccount): Promise<UserAccount> {
try {
  let asyncResult = await this.http.get("http://localhost:3000/user?email=" + loggedInUserAccount.email, { observe: 'response' }).toPromise();

  if (asyncResult.status == 200) {
    let accountsArray = asyncResult.body;
    let userAccount = new UserAccount();
    userAccount.name = accountsArray[0].name;
    userAccount.email = accountsArray[0].email;
    userAccount.userProfile = accountsArray[0].profile;
    this.userAccount = userAccount;

    return this.userAccount;
  }
} catch (error) {
  // when the http 404 occurs (will add handling for 500 etc later)
  return undefined;
}

}

0 个答案:

没有答案