【发布时间】:2019-11-04 00:57:23
【问题描述】:
我正在使用 Angular 7 并创建了一个拦截器以在每个请求中包含身份验证令牌。
这是我的拦截器代码:
import { Observable } from 'rxjs';
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
constructor() { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const token = localStorage.getItem('authToken');
if (token) {
request = request.clone({
setHeaders: {
authorization: token
}
});
}
return next.handle(request);
}
}
验证身份验证令牌的节点api:
const jwt = require('jsonwebtoken');
function verifyToken(req, res, next) {
var token = req.headers['authorization']; // Coming Undefined
if (!token)
return res.status(403).send({ auth: false, message: 'No token provided.' });
jwt.verify(token, 'top_secret', function (err, decoded) {
if (err)
return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' });
// if everything good, save to request for use in other routes
req.userId = decoded.user.email;
next();
});
}
module.exports = verifyToken;
使用 Postman 访问 API 时一切正常,但使用 Angular 代码发送请求时,节点 API 未接收到标头。
【问题讨论】:
-
@lealceldeiro,是的,我试过这个,发现它不是真正的错误。编辑了我的代码。
-
Javascript 区分大小写字符。正如 lealcedeiro 所提到的,您正在设置
Authorization标头,同时期待authorization。但是,您也没有收到Authorization,所以这不是问题。您是否在发出请求时检查了您的网络选项卡以确认标头已被注入到请求中? -
@TimVN,是的,我没有获得授权或此授权的任何值。我已经用网络标签详细信息更新了问题。
-
你试过
request = request.clone({ setHeaders: { 'Authorization': token }, withCredentials: true }); -
你的
JwtInterceptor被正确调用了吗?
标签: javascript node.js angular typescript angular-http-interceptors