angular - 您在预期流的位置提供了“未定义”。HttpInterceptor 中的错误
问题描述
我已经看到并尝试了许多描述相同问题的其他线程,但找不到解决方案。我是角度技术的初学者。我正在使用 Angular 11。我正在尝试刷新 HttpInterceptor 类中的 JWT 令牌
this.loginService.checkRefreshToken(this.refreshtoke).pipe(
switchMap((tokenResponse: any) => {
if (tokenResponse) {
localStorage.setItem('authToken', tokenResponse.Token)
localStorage.setItem('refreshToken', tokenResponse.RefreshToken)
this.tokenSubject.next(tokenResponse);
console.log('token refreshed');
return next.handle(this.attachAuthToken(request));
}
else return <any>this.loginService.LogOutUser();
})
);
以上是我的拦截器类调用登录服务
checkRefreshToken(data : Irefreshtoken) : Observable<any> {
var body = JSON.stringify(data)
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'my-auth-token'
}),
};
const postURL = this.constants.API_ENDPOINT + this.constants.CheckRefreshToken;
return this.http.post<any>(postURL,data,httpOptions)
.pipe(
tap((result: any) => {
localStorage.setItem('authToken', result.Token)
localStorage.setItem('refreshToken', result.RefreshToken)
})
);
这是我的登录服务功能
[HttpPost]
[Route("CheckRefreshToken")]
public async Task<IActionResult> CheckRefreshToken(RefreshToken data)
这是我的控制器方法
post call 没有打到后端,总是以错误结束
ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (subscribeTo.js:27)
at innerSubscribe (innerSubscribe.js:69)
at CatchSubscriber.error (catchError.js:36)
at XMLHttpRequest.onLoad (http.js:1700)
at ZoneDelegate.invokeTask (zone-evergreen.js:402)
at Object.onInvokeTask (core.js:28499)
at ZoneDelegate.invokeTask (zone-evergreen.js:401)
at Zone.runTask (zone-evergreen.js:174)
at ZoneTask.invokeTask [as invoke] (zone-evergreen.js:483)
at invokeTask (zone-evergreen.js:1596)
我知道这是角度的一般错误。任何帮助都感激不尽。如果我在某个地方错了,请纠正我。这些代码是从教程代码中复制的
谢谢你的帮助
解决方案
您可以删除 checkRefreshToken 中的管道并返回this.http.post<any>(postURL,data,httpOptions)
。保存在本地存储中的逻辑已经在拦截器中完成。
推荐阅读
- angular - Angular 5循环遍历对象数组
- c# - 一个消息框内的数据验证和错误列表c#
- java - 为什么鼠标移动和不移动时按钮上的视觉差异?
- testing - 如何测试 Sequelize 迁移?
- .net - WebApi - 将 streamContent 传递回客户端得到错误 500
- css - 无法使用 base64 编码字体解码下载的字体 create-react-app
- javascript - 需要从 HTML 源中复制函数的参数
- python - Google 安全浏览 API (v4) SE URL 的空 JSON
- oracle - 将平面文件中的 BC 年值插入 Oracle DB
- c++ - 内存泄漏检测:malinfo、_heapwalk