You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CSRFToken无需服务端渲染

在前后端分离的架构中,由于前端是静态页面,在无法直接使用服务端渲染的情况下,如何在前端使用 CSRF Token 来增加应用安全性是一个常见问题。

一种解决方法是通过在页面中引入 CSRF Token,并在提交请求时将 Token 一同发送到后端。具体实现可以通过在前端使用 Cookie 或者 LocalStorage 存储 Token,在请求时从中获取,然后将 Token 附加到请求头中。后端可以读取请求头中的 Token 并进行验证。

以下是一个使用 Axios 库实现该方法的示例:

前端代码:

// 在登录后保存 Token 至 Cookie 中
function saveToken(token) {
  document.cookie = `csrf_token=${token}; path=/`;
}

// 获取 Cookie 中保存的 Token
function getToken() {
  return document.cookie
    .split(';')
    .find(cookie => cookie.trim().startsWith('csrf_token='))
    ?.split('=')[1];
}

// 在请求时将 Token 附加到请求头
async function request(url, data) {
  const token = getToken();
  const headers = { 'X-CSRF-Token': token };

  const response = await axios.post(url, data, { headers });
  return response.data;
}

// 登录按钮点击事件
async function onLoginClick() {
  const response = await request('/login', { username, password });
  // ...
}

后端代码:

function validateCsrfToken(req, res, next) {
  const token = req.header('X-CSRF-Token');
  const savedToken = req.cookies.csrf_token;

  if (!token || token !== savedToken) {
    res.status(403).send('Invalid CSRF token');
  } else {
    next();
  }
}

app.post('/api/submit', validateCsrfToken, (req, res) => {
  // ...
});

在上述示例中,前端代码通过调用 saveToken 函数将 Token 保存至 Cookie 中,并在请求时通过调用 getToken 函数

免责声明
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS9.9元起,域名1元起,助力开发者快速在云上构建应用

域名注册服务

cn/com热门域名1元起,实名认证即享
1.00/首年起32.00/首年起
新客专享限购1个
立即购买

云服务器共享型1核2G

超强性价比,适合个人、测试等场景使用
9.90/101.00/月
新客专享限购1台
立即购买

CDN国内流量包100G

同时抵扣两种流量消耗,加速分发更实惠
2.00/20.00/年
新客专享限购1个
立即购买

CSRFToken无需服务端渲染 -优选内容

MAD,现代安卓开发技术:Android 领域开发方式的重大变革|社区征文
无需更改控件的 `visibility` 属性,添加 Tools:visibility=true 即可预览布局的变化`Motion Editor` 则是支持 MotionLayout 类型布局的视觉设计编辑器,可让更轻松地创建和预览和调试动画。`Layout Inspector`... String token) { String jsonBody = "{ username: \"$username\", token: \"$token\"}"; Executors.newSingleThreadExecutor().execute(() -> { Result result; try { r...
场景搭建(Android)
详细细节请参见 RTC服务开通指南 整体实现流程主播与主播连麦pk 主播与观众连麦互动 核心功能实现主播开启直播和观众进房时序图 示例代码 Java /** * 加入RTC房间并初始化参数 * @param token 加入 RTC 房间的... // 设置本地渲染和编码镜像 mRTCVideo.setLocalVideoMirrorType(MirrorType.MIRROR_TYPE_RENDER_AND_ENCODER); } else { mRTCVideo.stopVideoCapture(); mRTCVideo.stopAudioCapt...
场景搭建(Android)
SDK集成如下是一个总体接入流程,详细细节请参见 RTC服务开通指南。 整体实现流程整体业务流程图 核心功能实现进入退出房间时序图 示例代码 Java /** * 初始化并加入房间 * @param appId 应用申请的appId * @param roomId 要加入的RTC房间 * @param userId 用户的UserId * @param userName 用户的UserName * @param token 要加入RTC房间对应的Token */public void initAndJoinRoom(String appId, String roomId, String userId,...
场景搭建(iOS)
详细细节请参见 RTC服务开通指南 整体实现流程主播与主播连麦pk 主播与观众连麦互动 核心功能实现主播开启直播和观众进房时序图 示例代码 objectivec /** * 加入RTC房间并初始化参数 * @param token: RTC Toke... // 设置本地渲染和编码镜像 [self.rtcEngineKit setLocalVideoMirrorType:ByteRTCMirrorTypeRenderAndEncoder]; } else { [self.rtcEngineKit stopVideoCapture]; [self....

CSRFToken无需服务端渲染 -相关内容

场景搭建(Windows)
SDK集成如下是一个总体接入流程,详细细节请参见 RTC服务开通指南。 整体实现流程整体业务流程图 核心功能实现进入/退出房间时序图 示例代码 cpp int VideoCallRtcEngineWrap::initAndJoinRTCRoom() { // 初始... 需要申请AppId和Token //Join the room, start connecting the microphone, you need to apply for AppId and Token auto userName = videocall::DataMgr::instance().user_name(); auto userId = videoc...
发布和订阅公共流
Native: 自 v3.37 开始支持 Web: 自 v4.41 开始支持 功能实现你可以在应用服务端和应用客户端发布公共流。查看调用 OpenAPI 发布公共流。本文将介绍如何在客户端发布和订阅公共流。 说明:不同平台的实现的步骤相同,但接口名称、参数名称可能略有差异。以下指南以 Android RTC SDK 为例,参考对应平台的 API 文档获取更多信息。 发送端进房。 java public int joinRoom(String token, String channelName, String uid, RTCRoomCon...
场景搭建(Android)
SDK集成如下是一个总体接入流程,详细细节请参见 RTC服务开通指南。 整体实现流程整体业务流程图 核心功能实现准备通话时序图 示例代码 Java public void startCall(String appId, String bid) { // 创建 RTC... return mRTCRoom.joinRoom(token, new UserInfo(userId, null), roomConfig);}// 远端用户加入房间后设置渲染画布。public void onUserJoined(UserInfo userInfo, int elapsed) { Runnable runnable = ()...
回调
Token 过期或网络原因等掉线。 详细信息请参看连接状态提示• 2: 远端用户调用 setUserVisibility 切换至不可见状态。 • 3: 服务端调用 OpenAPI 将远端用户踢出房间。 onStreamRemovecpp BYTERTC_DEPRECATED vir... 音频渲染设备、和视频采集设备。 传入参数 参数名 类型 说明 device_id const char* 设备 ID device_type bytertc::MediaDeviceType 详见 MediaDeviceType device_warning bytertc::MediaDeviceWarning 详见 Media...
回调
Token 过期或网络原因等掉线。 详细信息请参看连接状态提示• 2: 远端用户调用 setUserVisibility 切换至不可见状态。 • 3: 服务端调用 OpenAPI 将远端用户踢出房间。 onStreamRemovecpp BYTERTC_DEPRECATED vir... 音频渲染设备、和视频采集设备。 传入参数 参数名 类型 说明 device_id const char* 设备 ID device_type bytertc::MediaDeviceType 详见 MediaDeviceType device_warning bytertc::MediaDeviceWarning 详见 Media...
回调
详细信息请参看连接状态提示 • 2: 远端用户调用 setUserVisibility: 切换至不可见状态。 • 3: 服务端调用 OpenAPI 将远端用户踢出房间。 onTokenWillExpire:objectivec - (void)onTokenWillExpire:( ByteRTCRoo... 本回调无需手动开启。 传入参数 参数名 类型 说明 deviceType ByteRTCAudioDeviceType 设备类型,包括麦克风和扬声器,参阅 ByteRTCAudioDeviceType。 volume int 音量值,[0, 255]。当 volume 变为 0 时,muted 会转为...
Windows 2022镜像支持内置GRID
GPU渲染型实例新增支持Windows 2022数据中心版with GRID 镜像,内置GPU驱动和VWS授权,无需用户为实例手动注入GRID token,提供开箱即用的渲染服务。 除Windows 2022外,Windows 2019、Windows 2016、Ubuntu 20.04、veLinux 1.0等镜像也内置了VWS授权以支持GPU实例进行渲染。 发布地域:华北2(北京)、华东2(上海)。如需了解更多信息,请参考官网文档GPU云服务器。

体验中心

通用文字识别

OCR
对图片中的文字进行检测和识别,支持汉语、英语等语种
体验demo

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

火山引擎·增长动力

助力企业快速增长
了解详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

新用户特惠专场

云服务器9.9元限量秒杀
查看活动

一键开启云上增长新空间

立即咨询