Angular2 Http.get发送两个请求

时间:2016-10-07 10:47:19

标签: php angular angular2-http

我有简单的身份验证服务我使用jwt令牌,如果生病了需要用户详细检查授权标头和发送请求api终点但角度2请求发送第一个请求标题空键但第二个正确的标题让我解释

网络运营 http://pasteboard.co/c3wmFZvtJ.jpg

错误的标题 http://pasteboard.co/c3wDdFxMy.jpg

正确的标题 http://pasteboard.co/1cKy9EHDy.jpg

我的Http.Get功能

getUsers(): Observable<User[]> {
    // Authorization Tokeni Ayarlanıyor
    let headers = new Headers({ 'Authorization': this.authenticationService.token });
    let options = new RequestOptions({ headers: headers });
    // Kullanıcı Headeri Gönderiliyor
    return this.http.get('http://localhost/Hesap/Detay', options)
        .map((response: Response) => 
            response.json().detay
     ); 
}

我在这里调用此功能

ngOnInit() {
    this.userService.getUsers()
        .subscribe(users => {
            this.users = users;
        });
}

Php Side

public function Detay(){
    echo $this->headers["authorization"];
    if(!isset($this->headers["authorization"]) || empty($this->headers["authorization"])){
        echo json_encode(array("Hata" => "Header Yok"));
    }else{
        $token = explode(" ", $this->headers["authorization"]);
        $user = JWT::decode(trim($token[0],'"'));
        $this->load->model("auth_model");
        if($this->auth_model->checkUser($user->id, $user->KullaniciAdi) !== false)
            {
                $this->load->model("user_model");
                $detay = $this->user_model->get($user->id, $user->KullaniciAdi);
                echo json_encode(
                    array( 
                            "detay"=> $detay
                    )
                );
            }
        }
}

第二个标题可以回显令牌 http://pasteboard.co/c3C6ed2k7.jpg

现在问题只有开发模式,如果我构建prod项目发送一个请求

1 个答案:

答案 0 :(得分:4)

由于OPTIONS,第一个请求似乎是CORS请求。

如果是这种情况,那就没有错。浏览器需要事先请求检查您是否可以调用api以及是否允许使用Headers。

标题Access-Control-Request-Headers会检查您是否可以在请求中发送authorization标题。

标题Access-Control-Request-Method会检查您是否可以发送GET请求。

只有当客户的域与api的域不同时,才会发生预检请求。

看看这个link