抱歉,想不出更好的问题标题来解释这个问题。
设置
路由:
{
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确定以返回现有帐户
问题
如果该帐户在后端存储中不存在,则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;
}
}