Angular 7在请求时没有发送正确的标头

6

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

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

当我试图从postman发送有效的令牌到我的路径/ api / users时,一切都正常,但是当我从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}),我可以获取用户列表。

谢谢阅读!

2个回答

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,然后在您的情况下将其绑定为 HttpGet
希望它能起作用 - 祝编码愉快!

2
我通过创建一个拦截器来解决了这个问题:
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);
      }
    }

谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接