我正在构建一个MEAN堆栈应用程序,我在后端有Node,前端有Angular。我正在进行用户身份验证,我在Angular中有一个登录页面。登录信息设置为节点后端,使用bcryptjs我将密码与存储在MongoDB数据库中的加密密码进行比较。然后,我使用JSON Web令牌创建一个令牌,我通过设置标题将其发送给Angular。我让它在我的电脑上运行。但我不得不这样做。
在我的NodeJS Express应用程序中,在开发模式下,我的节点服务器在端口3000上运行,我的Angular服务器在4200上运行。我必须设置:
res.setHeader('Access-Control-Expose-Headers', 'x-auth');
允许Angular使用以下命令访问包含令牌的x-auth标头:
let token = response.headers.get('x-auth')
如果没有在NodeJS上设置曝光标题,标题就不会显示在Angular应用上。 要在响应中设置标头,在处理身份验证的NodeJS方法中,我使用通常的:
res.setHeader('x-auth', token);
所以,这是我的问题: 如果在Heroku上部署,这将如何工作?当客户端尝试登录时,我是否需要设置('Access-Control-Expose-Headers','x-auth')以便客户端可以接收NodeJS服务器发回的令牌?既然,这是两个独立的域名?我是否需要在生产中设置此标题,因为我现在只在开发时这样做。我尝试在我的计算机上以生产模式运行整个应用程序,它运行时不需要标题,但我从同一个域访问它,因此没有CORS问题。
我还尝试通过POSTMAN将登录POST请求发送到NodeJS服务器。我在使用或不使用expose头的情况下返回x-auth令牌。那么POSTMAN请求与Angular发送的请求有何不同?