Angular4/5 auth认证问题

1.刚开始想用拦截器的方法加入token,但拦截器也拦截住了登录,在未登录的情况下没有token,所以会一直出问题.
2.把拦截器配置到子模块中,由于子模块是懒加载的,拦截器不生效
3.想重写http,但5.0后http转为HttpClient(common/http)原http弃用了许多类,所以无法下手
4.发送请求后请求多出了Access-Control-Request-Headers:authorization
而不是authorization:1234567,永远都是401
图片描述
图片描述
图片描述

阅读 3.7k
2 个回答

1.看不懂,是要先获取token再登录吗?
4.这个是跨域的options请求,出现Access-Control-Request-Headers:authorization是对的,后台设置放options通过

关于token超时可以在next.handle里处理,让后台返回个约定好的http状态码,然后根据这个状态码进行你的业务,比如重新获取token

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
  {
    let authHeader = `Bearer ${this.tokenService.token}`;

    const authReq = req.clone({headers: req.headers.set('Authorization', authHeader)});

    return next.handle(authReq)
      .catch((res: HttpErrorResponse) =>
      {
        switch (res.status)
        {
          case 401:
            console.info('未授权', '401');
            break;
          case 403:
            console.info('权限拒绝', '403');
            break;
          case 404:
            console.info('API不存在', '404');
            break;
        }
        // 以错误的形式结束本次请求
        return Observable.throw(res.message);
      });
  }

可以通过拦截器注入你的token,对于拦截器拦截住你登录请求的情况,你可以针对登录新建一个单独的模块,在这个模块中也注入HttpClientModule,这样登录部分就是独立的了,就不会去拦截你的登录请求了,简单来说就是你应用里面存在两个HttpClient,一个有拦截器,一个没有拦截器,我之前就是这样实现的登录逻辑

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进