angular2 如何让所有http请求都带上cookie

不知道是不是必须使用拦截器,否则就必须一个一个添加。

拦截器按照教程生成之后 ,不知道如何使用,请一并解释,并展示在组件中的用法。

阅读 7.3k
3 个回答

Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息。

注意下后半句话,也就是说只要你访问web服务器,会自动把cookie信息带过去,无需你做多于的操作。

我们是后台在登录的时候直接把Token写在cookie中的,下次请求的时候不用做多余的操作,直接就会把cookie带过去,后台解析就行,Angular2 不用做其他的与Cookie相关的操作。我们底层的网络访问代码如下:

import {Injectable} from "@angular/core";
import {Headers, Http, RequestOptions} from "@angular/http";


@Injectable()
export class HTTPClient {
 
    
      private getWebServiceUrl: string;

    constructor(private _http: Http) {
        this.getWebServiceUrl = 'https://xxx.com/';
    }

    public requestPost(requestUrl, requestJson) {
        const body: string = JSON.stringify(requestJson);
        const header: any = new Headers({'Content-Type': 'application/json'});
        const options: any = new RequestOptions({headers: header});
        return this._http.post(this.getWebServiceUrl + requestUrl, body, options);
    }
}

中间层的Service如下:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';//这句一定要加上,angular2教程中少了这句,实际项目中代码会出错的。
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import { HTTPClient } from '../../core/http-client';

@Injectable()
export class XXXXXService {

  private url='https://XXX/com';
  constructor(private httpClient: HTTPClient) { }

  getXXXXList(request) {
    return this.httpClient.requestPost(this.url, request)
      .map(response => response.json())
      .catch(this.handleError);
  }

  private handleError(error: Response | any) {
    const body = error.json() || '';
    return Observable.throw(body);
  }
}

我的做法和楼上类似,但是Angular4.3版本更新了HTTP Client,新增了拦截器,你可以使用新的Http客户端来做。

拦截器就可以了,写一个AuthInterceptor继承http,实现里边的intercept方法,增加请求头withCredentials: true

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