异步 setContext 中的身份验证等待
Posted
技术标签:
【中文标题】异步 setContext 中的身份验证等待【英文标题】:authentication await in async setContext 【发布时间】:2020-07-25 06:48:18 【问题描述】:在文档 (https://www.apollographql.com/docs/angular/recipes/authentication/) 中有一个示例。 但是,如果您有一个 angular-apollo watch().valueChanges 或 fetch() 作为返回的 Observable,这不起作用...
我的代码是:
const auth = setContext(async (_, headers) =>
let token = authService.getAccessToken();
if (!authService.hasValidAccessToken())
if (authService.hasRefreshToken())
await this.authService.refreshToken().pipe(first()).toPromise(); //Does not work...
token = authService.getAccessToken();
// Return the headers as usual
return
headers:
Authorization: `Bearer $token`,
,
;
);
authService.refreshToken() 方法返回这个:
refreshToken(): Observable<any>
this.removeAccessToken();
if (this.hasRefreshToken())
return this.refreshGQL.fetch(
refreshToken: this.getRefreshToken()
).pipe(
tap(next =>
this.storeTokens(next.data.refresh);
)
);
问题是,不能调用 subscribe,这将启动 Observable。 你有解决办法吗?
【问题讨论】:
【参考方案1】:好的,它与 await for promise 和 observable to promise 无关。 这是完全正确的。
这只是一个典型的僵局。
如果没有有效的访问令牌,它将尝试接收一个新的,从而产生一个 gql 请求,也没有有效的访问令牌,它将尝试在每个 gql 请求等中接收一个新的......
如果操作名称等于刷新突变或查询,只需跳过逻辑即可解决。
【讨论】:
以上是关于异步 setContext 中的身份验证等待的主要内容,如果未能解决你的问题,请参考以下文章
IE 10 windows 身份验证中的异步 KendoUI 上传
用于重定向到 REST api 中的身份验证的适当 HTTP 状态
在 IIS 中禁用匿名身份验证后 WebServiceHost 无法正常工作
我用的是window server 2003系统, 管理工具 计算机管理中:无本地用户和组,如何调出?另用window 身份验...