我有简单的身份验证服务我使用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项目发送一个请求
答案 0 :(得分:4)
由于OPTIONS
,第一个请求似乎是CORS
请求。
如果是这种情况,那就没有错。浏览器需要事先请求检查您是否可以调用api以及是否允许使用Headers。
标题Access-Control-Request-Headers
会检查您是否可以在请求中发送authorization
标题。
标题Access-Control-Request-Method
会检查您是否可以发送GET
请求。
只有当客户的域与api的域不同时,才会发生预检请求。
看看这个link。