【问题标题】:HTTP interceptor: you provided 'undefined' where a stream was expectedHTTP 拦截器:您在预期流的位置提供了“未定义”
【发布时间】:2023-04-06 14:29:01
【问题描述】:

我正在使用 Angular 6,尝试实现 http 拦截器,尝试登录时它给了我ou provided 'undefined' where a stream was expected。我没有 jwt 令牌,我有一个 x-session

interceptor.ts

  constructor(private injector: Injector) { }
  intercept(req, next) {
    const auth = this.injector.get(AuthService);
    const token = auth.getToken();
    if (token) {
      const tokenizedReq = req.clone({
        setHeaders: ({
          'Content-Type': 'application/json',
          'x-session': token
        })

      });
      return next.handle(tokenizedReq);
    }

login service

  login(username, password) {
    const data = {
      username: username,
      password: password
    };
    const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
    return this.http.post(this.login_url, data, { headers: headers, observe: 'response' });
  }
  getToken() {
    return JSON.parse(localStorage.getItem('token'));
  }

login component

  onLogin() {
    this.auth.login(this.username, this.password).subscribe(data => {
      if (localStorage.getItem('data') === null) {
        localStorage.setItem('data', JSON.stringify(data));
      }
      const token = data.headers.get('x-session');
      const expiry = data.headers.get('x-session-expiry');
      localStorage.setItem('token', JSON.stringify(token));
      localStorage.setItem('token-expiry', JSON.stringify(expiry));
      this.router.navigate(['']);
    }, err => {
      console.log(err);
    });
  }

如何修复错误?我想如果我使用的是 jwt,应该不会出错,因为大多数文章都推荐上面显示的方式或类似的方式。

【问题讨论】:

  • 你设置断点来找出未定义的断点了吗?
  • @NgocNamNguyen 明天凌晨 4 点会做,抱歉忘记做这个
  • 错误信息是否指明是哪一行?

标签: angular angular6 angular-http-interceptors


【解决方案1】:

我不知道我的解决方案是不是最好的,但它似乎有效,如果有人有更好的解决方案,我会接受他的。

interceptor

constructor(private injector: Injector) { }
  intercept(req, next) {
    const auth = this.injector.get(AuthService);
    const token = auth.getToken();
    if (token) {
      const tokenizedReq = req.clone({
        setHeaders: ({
          'Content-Type': 'application/json',
          'x-session': token
        })

      });
      return next.handle(tokenizedReq);
    } else {
      const tokenizedReq = req.clone({
        setHeaders: {
          'Content-Type': 'application/json'
        }
      });
      return next.handle(tokenizedReq);
    }
  }

login service

 login(username, password) {
    const data = {
      username: username,
      password: password
    };
    return this.http.post(this.login_url, data, { observe: 'response' });
  }

所以请注意我添加了一个else语句,如果用户已登录添加令牌,否则不要添加它。

【讨论】:

    猜你喜欢
    • 2020-03-10
    • 2022-01-17
    • 2018-11-08
    • 2018-05-31
    • 2020-04-15
    • 2021-05-21
    • 1970-01-01
    • 2021-11-29
    • 2021-12-10
    相关资源
    最近更新 更多