在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML5/ Angular4/5 auth認(rèn)證問(wèn)題

Angular4/5 auth認(rèn)證問(wèn)題

1.剛開(kāi)始想用攔截器的方法加入token,但攔截器也攔截住了登錄,在未登錄的情況下沒(méi)有token,所以會(huì)一直出問(wèn)題.
2.把攔截器配置到子模塊中,由于子模塊是懶加載的,攔截器不生效
3.想重寫http,但5.0后http轉(zhuǎn)為HttpClient(common/http)原h(huán)ttp棄用了許多類,所以無(wú)法下手
4.發(fā)送請(qǐng)求后請(qǐng)求多出了Access-Control-Request-Headers:authorization
而不是authorization:1234567,永遠(yuǎn)都是401
圖片描述
圖片描述
圖片描述

回答
編輯回答
單眼皮

1.看不懂,是要先獲取token再登錄嗎?
4.這個(gè)是跨域的options請(qǐng)求,出現(xiàn)Access-Control-Request-Headers:authorization是對(duì)的,后臺(tái)設(shè)置放options通過(guò)

關(guān)于token超時(shí)可以在next.handle里處理,讓后臺(tái)返回個(gè)約定好的http狀態(tài)碼,然后根據(jù)這個(gè)狀態(tài)碼進(jìn)行你的業(yè)務(wù),比如重新獲取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('未授權(quán)', '401');
            break;
          case 403:
            console.info('權(quán)限拒絕', '403');
            break;
          case 404:
            console.info('API不存在', '404');
            break;
        }
        // 以錯(cuò)誤的形式結(jié)束本次請(qǐng)求
        return Observable.throw(res.message);
      });
  }
2018年4月5日 11:22
編輯回答
解夏

可以通過(guò)攔截器注入你的token,對(duì)于攔截器攔截住你登錄請(qǐng)求的情況,你可以針對(duì)登錄新建一個(gè)單獨(dú)的模塊,在這個(gè)模塊中也注入HttpClientModule,這樣登錄部分就是獨(dú)立的了,就不會(huì)去攔截你的登錄請(qǐng)求了,簡(jiǎn)單來(lái)說(shuō)就是你應(yīng)用里面存在兩個(gè)HttpClient,一個(gè)有攔截器,一個(gè)沒(méi)有攔截器,我之前就是這樣實(shí)現(xiàn)的登錄邏輯

2017年11月2日 20:01