Angular 7未根据请求发送正确的标头

Posted

技术标签:

【中文标题】Angular 7未根据请求发送正确的标头【英文标题】:Angular 7 not sending correct header on request 【发布时间】:2019-04-11 12:40:43 【问题描述】:

我无法在 Angular 7 中发送正确的标题! 我在后端使用护照:

"app.get('/api/users', passport.authenticate('jwt', session: false), (req, res, next) => ... bla bla bla...."

当我尝试将有效令牌从邮递员发送到我的路径/api/用户时,一切正常,但是当我从 Angular 执行此操作时却没有。 (* Angular 不显示错误!) 假设“Bearer validToken”是一个有效的令牌 这样我发送标题:

getAll() 

const httpOptions = 
headers: new HttpHeaders(
'Content-Type': 'application/json',
'Authorization': 'Bearer validToke.' 
  );
;

return this.http.get<user[]>(`http://localhost:3000/api/users`, httpOptions);

我可以从 Angular 进行身份验证并获取 Bearer 令牌,一切正常,如果我删除 passport.authenticate ('jwt', session: false),我可以获得用户列表

感谢您的阅读!

【问题讨论】:

【参考方案1】:

我可以通过创建一个拦截器来解决这个问题:

import  Injectable  from '@angular/core';
    import  HttpRequest, HttpHandler, HttpEvent, HttpInterceptor  from '@angular/common/http';
    import  Observable  from 'rxjs';

    import  AuthenticationService  from '../_services/authentication.service';

    @Injectable()
    export class JwtInterceptor implements HttpInterceptor 
      constructor(private authenticationService: AuthenticationService) 

      intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> 
        // add authorization header with jwt token if available
        let currentUser = this.authenticationService.currentUserValue;
        if (currentUser && currentUser.token) 
          request = request.clone(
            setHeaders: 
              Authorization: `$currentUser.token`
            
          );
        

        return next.handle(request);
      
    

谢谢

【讨论】:

【参考方案2】:

对我来说一切似乎都是正确的 - 但我对您的代码进行了一些小改动

不要绑定HttpOptions直接在请求中绑定HttpHeaders检查下面的代码

getAll() 

const httpHeaders = new HttpHeaders (
     'Content-Type': 'application/json',
     'Authorization': 'Bearer validToke.' 
   );

return this.http.get<user[]>(`http://localhost:3000/api/users`,  headers: httpHeaders );

现在这将为请求添加您的标头 - 如果您用于从不同域获取数据 - 尝试在您的服务器上添加 cors - 浏览器会将请求预先发送为HttpOptions,然后将其绑定为@ 987654325@在你的情况下

希望它有效 - 编码愉快!!

【讨论】:

以上是关于Angular 7未根据请求发送正确的标头的主要内容,如果未能解决你的问题,请参考以下文章

Angular $http 未在 OPTIONS 飞行前发送标头

使用 OPTIONS 方法未使用 http 请求 Angular 6 发送授权标头

Ionic 2 / Angular 2 / CORS:HTTP 标头未随请求一起发送

从使用 Angular 7 的请求中接收 Spring Boot 中的空授权标头,但 Postman 工作正常

Angular 7:对预检请求的响应未通过访问控制检查:请求中不存在“Access-Control-Allow-Origin”标头

Angular 2 http 标头似乎生成或发送不正确