You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Angular前端向Node.js后端传递Bearer Token?

问题分析与解决方案

你当前用HttpOnly Cookie存储JWT,这种机制下前端JavaScript无法直接读取该Cookie(这是HttpOnly的安全设计目的),所以你根本不需要“获取Bearer Token”——你的后端认证逻辑是从Cookie里提取JWT,而非从请求头的Bearer Token中获取。

1. 修正Angular请求配置,自动携带Cookie

修改你的CategoriaService,在请求中启用withCredentials,浏览器就会自动把后端设置的HttpOnly Cookie发送给服务器:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from '../../../../environments/environment';

@Injectable({
  providedIn: 'root',
})
export class CategoriaService {
  constructor(private http: HttpClient) {}

  private url: string = environment.apiUrl;

  getCategoria(): Observable<any> {
     return this.http.get(`${this.url}rest/getCategoria`, {
       withCredentials: true // 关键配置:开启后自动携带Cookie
     });
  }
 }

2. 后端CORS必须允许携带凭证

如果前后端跨域,后端的CORS配置必须开启credentials,否则浏览器会拦截Cookie的发送。Node.js中用cors中间件的配置示例:

const cors = require('cors');
app.use(cors({
  origin: 'http://localhost:4200', // 替换成你的前端实际域名
  credentials: true // 必须设为true
}));

3. 调整Secure Cookie的环境适配

你登录路由里设置了secure: true,这会让Cookie只在HTTPS连接下生效。本地开发用HTTP的话,得把这个值改成false,否则浏览器不会保存Cookie:

res.cookie("jwt", acessToken, {
  httpOnly: true,
  maxAge: maxAge,
  secure: process.env.NODE_ENV === 'production' // 生产环境用HTTPS才设为true
});

补充说明

你的后端authMiddleware是从req.cookies["jwt"]读取Token的,完全不需要前端手动处理Bearer Token。只要前端请求带上Cookie,后端就能完成认证流程。

内容的提问来源于stack exchange,提问作者Guilherme Peixe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:34:50